在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
这篇教程是基于你的工程是cocos2d-x-lua的项目,我假设你已经完全驾驭cocos-x/samples/Lua/HelloLua工程,基本明白lua和c++互调的一些原理。 我们的目的是要在lua中使用我们自己定义的类,并且这个类要导出到我们自己的module,意思就是说不是追加到LuaCocos2d.cpp里面,目的是为了使我们的module和coco2d的module完全分离,这样以后更新cocos2d-x版本时,对我们的module没影响。
1、先在Classes文件夹下创建一个类Test(新创建的,名字都是都是自己定,你可以随意起,下面不赘述),代码就简单点,例如 #ifndef _TEST_H_ #define _TEST_H_ class Test { public: Test(); ~Test(); static int foo(){return 10;} int do(){return 20;} };
2、然后在工程目录创建一个文件夹叫MyLuaModule,和Classes文件夹同级。
3、里面创建个文件MyLuaModule.h,把他拖进工程(add to target勾上),写下一下代码 #ifndef __MY_LUA_MODULE_H_ #define __MY_LUA_MODULE_H_ extern "C" { #include "tolua++.h" #include "tolua_fix.h" } #include "Test.h" //你新加的类的头文件 TOLUA_API int tolua_MyLuaModule_open(lua_State* tolua_S); //这个函数我们只要在这里先声明就行了,到时候有工具自动给我们生成 #endif // __MY_LUA_MODULE_H_
4、到前面创建的MyLuaModule目录下,创建一个文件叫Test.pkg(这个最好和你新加的类名字一样),写这个文件要遵循一些规则: 1) enum keeps the same//枚举不变 2) remove CC_DLL for the class defines, pay attention to multi inherites//移除掉定义的类的CC_DLL宏(我们自定义的类其实没有),注意多重继承 遵循以上7点原则,我们就写下这些 注意:最好就是把你这个类的头文件里的全部复制到pkg里,然后移除掉不必要的,剩下就对了 class Test { static int foo(); int do(){return 20;} };
5、到上面创建的MyLuaModule目录下,创建一个文件叫MyLuaModule.pkg,写下一下代码 $#include "MyLuaModule.h" $pfile "Test.pkg"
这个文件其实是作为一个汇总文件,我们就拿这个去自动生成代码。 6、我们进入cocos2d的根目录/tools/tolua++,Mac系统解压tolua++.Mac.zip,Win系统解压tolua.rar,把解压得到的tolua++(可执行文件)拷贝到上面创建的MyLuaModule目录下 7、现在准备工作都做好了,如果前面没有问题的话,是能编译通过的,接下来还有一个重要的步骤,那就是把我们module注入到LuaScriptEngine里。 tolua_MyLuaClass_open(pEngine->getLuaStack()->getLuaState());同时别忘了include上我们MyLuaModule.h头文件。 8、测试。新建个lua脚本,里面写 local test = Test:new() print("test:do()=",test:do()) print("Test:foo()=",Test:foo())
build完运行下看output里的结果把
关于./tolua++ -tCocos2d -o MyLuaModule.cpp MyLuaModule.pkg这句话的-tCocos2d参数到底啥意思,请知道的指教下,谢谢了先。 |
请发表评论