• cocos2dx lua学习笔记 <一> quick 3.5定义本身C++类是必然lua


    请尊重原创 转载有名源:http://blog.csdn.net/wushao126/article/details/46660375
    首先去官网下载最新的quick。配置好环境。创建一个luaproject,命令 cocos new XXX(项目名称) -p com.xxxx.xxxx(包名) -l lua -d xxx(新建project保存路径)

    project创建后,找到project文件夹下的frameworks untime-srcClasses,创建一个c++类。我创建的类是

    文件名称:LuaBindingTest.h

    #pragma once
    class LuaBindingTest
    {
    public:
    	LuaBindingTest();
    	~LuaBindingTest();
    
    	void add(long a,long b);
    	void sub(int a, int b);
    };
    
    

    文件名称:LuaBindingTest.cpp
    #include "LuaBindingTest.h"
    #include "cocos2d.h"
    USING_NS_CC;
    
    LuaBindingTest::LuaBindingTest()
    {
    }
    
    
    LuaBindingTest::~LuaBindingTest()
    {
    }
    
    void LuaBindingTest::sub(int a, int b)
    {
    	CCLOG("a - b = %d", a - b);
    }
    
    void LuaBindingTest::add(long a, long b)
    {
    	CCLOG("a + b = %ld", a + b);
    }
    


    之后在project目录下的frameworkscocos2d-x ools olua目录中找到genbindings.py目录。备份一份,改名genbindings_binding_test.py。打开此文件,须要改动内容,定位大约在130行之后,找到内容类似

            tolua_root = '%s/tools/tolua' % project_root
            output_dir = '%s/../runtime-src/Classes/auto' % project_root
    
            cmd_args = {'myclass.ini' : ('myclass', 'lua_myclass_auto'), 
                        'cocos2dx_extension.ini' : ('cocos2dx_extension', 'lua_cocos2dx_extension_auto'), 
                        'cocos2dx_ui.ini' : ('cocos2dx_ui', 'lua_cocos2dx_ui_auto'), 
                        'cocos2dx_studio.ini' : ('cocos2dx_studio', 'lua_cocos2dx_studio_auto'), 
                        'cocos2dx_spine.ini' : ('cocos2dx_spine', 'lua_cocos2dx_spine_auto'), 
                        'cocos2dx_physics.ini' : ('cocos2dx_physics', 'lua_cocos2dx_physics_auto'), 
                        'cocos2dx_experimental_video.ini' : ('cocos2dx_experimental_video', 'lua_cocos2dx_experimental_video_auto'), 
                        'cocos2dx_experimental.ini' : ('cocos2dx_experimental', 'lua_cocos2dx_experimental_auto'), 
                        'cocos2dx_controller.ini' : ('cocos2dx_controller', 'lua_cocos2dx_controller_auto'), 
                        'cocos2dx_cocosbuilder.ini': ('cocos2dx_cocosbuilder', 'lua_cocos2dx_cocosbuilder_auto'), 
                        'cocos2dx_cocosdenshion.ini': ('cocos2dx_cocosdenshion', 'lua_cocos2dx_cocosdenshion_auto'), 
                        'cocos2dx_3d.ini': ('cocos2dx_3d', 'lua_cocos2dx_3d_auto'), 
                        'cocos2dx_audioengine.ini': ('cocos2dx_audioengine', 'lua_cocos2dx_audioengine_auto'), 
                        'cocos2dx_csloader.ini' : ('cocos2dx_csloader', 'lua_cocos2dx_csloader_auto'), 
                        }
    tolua_root 就是ini文件所在文件夹,过会我们就要在这个文件夹下创建我们的ini文件。

    output_dir 是我们要生成的目标文件所在的文件文件夹,我把这个改动在classes文件夹下auto

    这是我改动后的文件内容

            tolua_root = '%s/tools/tolua' % project_root
            output_dir = '%s/../runtime-src/Classes/auto' % project_root
    
            cmd_args = {'myclass.ini' : ('myclass', 'lua_myclass_auto'), 
                        }

    myclass.ini就是接下来要创建的ini文件

    随便复制一个ini文件,改名为myclass.ini,打开文件,改动几个參数就可以

    prefix = myclass   

    target_namespace =   (空 表示没有)

    headers = %(cocosdir)s/../runtime-src/Classes/LuaBindingTest.h  (须要绑定c++类的头文件路径)

    classes = LuaBindingTest (类名)

    skip = (对lua隐藏的接口)

    改动好了之后保存文件。

    接着要配置环境

    找到此文件夹下的README.mdown文件,打开

    依照上面安装好,做好,关于cheetah这个,直接复制文件夹。别进入文件夹内把全部文件散着放到C:Python27Libsite-packages

    ndk r9b版本号以上就好了

    环境配置好后

    运行 python genbindings_binding_test.py命令

    你会在你的output_out 路径上看到了生成的文件,api目录,一个hpp,一个cpp。假设咩生成。就要检查下是不是出错环节。

    注冊

    打开AppDelegate.cpp。增加hpp头文件

    AppDelegate::applicationDidFinishLaunching方法中。在lua_module_register(L);下,复制刚才生成的hpp中register_all_myclass(L);

    这就注冊好了。


    调用

        local p = LuaBindingTest.new(0)
        p:add(4,1)
        p:sub(2,1)

    OVER





  • 相关阅读:
    字节流与字符流的区别?
    启动一个线程是用run()还是start()?
    Java中的异常处理机制的简单原理和应用?
    java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
    Java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
    运行时异常与一般异常有何异同?
    常用清除浮动的方法,如不清除浮动会怎样?
    多线程有几种实现方法?同步有几种实现方法?
    你所知道的集合类都有哪些?主要方法?
    至少两种方式实现自适应搜索?
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/5041444.html
Copyright © 2020-2023  润新知