Cocos2d-X tolua++ 使用

制作流程:
1、先写好自己的类,最好测试过了才拿来用(废话)

2、新建类的头文件和cpp文件建议放在scripting\lua\cocos2dx_support中(当然罗,可以在里面再创建一个新的文件夹)

3、找到tolua++文件夹

4、开始写pkg,pkg的编写规则如下(嘛嘛,看看tolua++里面的README也是不错的)

5、打开Cocos2d.pkg,添加$pfile "YourClass.pkg"(一看就懂)

6、打开basic.lua
看到CCObjectTypes了没?再里面加入你自己添加的(貌似只有继承自CCObject的才可以写进来?),它可以解决野指针的问题
然后往下翻啊翻,看懂了没?看到replace了没,其实这就是一个模板
你刚刚添加了自己的文件了是吧,这样子的话当然需要#include的啦,由于生成的文件LuaCocos2d.cpp是在scripting\lua\cocos2dx_support中的,所以#include路径神马的就不需要我教你了吧(当然啦,你也可以不在模板里面写,直接在LuaCocos2d.cpp里面添加的,或者在LuaCocos2d.cpp里面#include一个文件夹专门用来#include自己写的也行)
高级方法,写在Cocos2d.pkg里面,里面不是已经写了一个头文件了么,参考来写即可
重点来了,现在改成在LuaCocos2d.h里面手动#include了(我才不要)

7、好了啦,终于做好准备工作了,小子们,准备好了么,双击

8、你以为可以了么,想多了吧

不要忘了在liblua里把自己写的头文件和cpp文件添加进去


1.Generating the lua<-->C bindings with tolua++
//使用此命令生成LuaCocos2d.cpp文件
tolua++.exe -tCocos2d -o LuaCocos2d.cpp Cocos2d.pkg                 
   An ant script has been provided to generate the relevant files, to do this after
   modifying the .pkg files you should use the following command in this directory:
   ant
   This will generate the bindings file, patch it to compile successfully and move it
   to the standard destination.
 
2. Writing .pkg files                 //为要在lua使用的类编写pkg文件
   1) enum keeps the same     //枚举类型保留不变
   2) remove CC_DLL for the class defines, pay attention to multi inherites      //不要使用CC_DLL,改用多继承
   3) remove inline keyword for declaration and implementation                //删除内置变量?(其实只要删除定义部分就好了?)
   4) remove public protect and private     //不要用访问限定词
   5) remove the decalration of class member variable               //不要成员变量
   6) keep static keyword         //保留静态关键词
   7) remove memeber functions that declared as private or protected //非public的函数都删除

3.自己发现的一些问题
virtual关键词和=0去掉
可以根据需求添加以及修改
都是单继承,很少有多继承
继承的函数如果没有进行修改的话,不需要重写
由于pkg中不识别宏,所以要把CREATE_FUNC(ClassName);展开成 static  ClassName * create();  
回调函数虽然是指针类型(也就是一个int),但是在pkg中要声明成LUA_FUNCTION这一自定义类型。然后在cocos2dx的一个扩展中(可以在basic.lua文件中找到)对其进行处理。
什么鬼#ifdef啊,#include啊之类都通通删掉,啊,还有typedef(typedef enum 保留enum),#define NAME *** 这种可以不删除?
不能使用struct,要改为class(这貌似是bug)
enum里面的可以进行适当的修改,其实就是写明=几而已(貌似不写也没问题)
类函数定义在头文件的,删除定义,保留声明(记得改完后在末尾添加;你这笨蛋)
CCScrollViewDelegate* getDelegate() { return m_pDelegate; }
    void setDelegate(CCScrollViewDelegate* pDelegate) { m_pDelegate = pDelegate; }
要删除(只是在特定地方要么?还没对比过其它地方)
其实不需要调用的都可以删除的吧,比如那些在C++里面被调用的,在Lua里面重写应该也是没用的吧
不要使用限定词(比如cocos2d::之类的,否则可能会造成传递的参数类型不正确)
如果有使用到父类作为参数的,如果父类没有tolua,这时候需要使用tolua.cast()来转换类型,如果父类有tolua,就不需要转换类型了

你可能感兴趣的:(Cocos2d-X)