coco2dx Lua调用自定义的C++方法
本文代码实现环境 cocos2dx version-3.15 + Mac XCode version-8.3.3 之前介绍过如何创建自己的 Lua 工程:http://www.voidcn.com/article/p-vjrdxdoc-bqa.html?这里就不多赘述了 工程创建完成后,在工程路径?LearnCocosLua/frameworks/cocos2d-x/tools/tolua/ ?下查看?README.mdown 文档 On MAC: ---------- * The OSX 10.10 has a built-in python2.7 and if your os don't have python2.7 then use [Homebrew](http://brew.sh/) to install the python and use pip install the python dependencies. <pre> brew install python </pre> * Install python dependices by pip. <pre> sudo easy_install pip sudo pip install PyYAML sudo pip install Cheetah </pre> * Download NDK 64bit r10c or later from [Android Ndk](https://developer.android.com/ndk/downloads/index.html) * Run <pre> export NDK_ROOT=/path/to/android-ndk-10c ./genbindings.py </pre>其内容是配置各个平台下对应的环境依赖项:这里MAC下需要? 1.安装python 2.sudo easy_install pip 3.sudo pip install PyYAML 4.sudo pip install Cheetah 5.配置NDK_ROOT 环境配置完成后,进入到工程目录?LearnCocosLua/frameworks/cocos2d-x/tools/tolua/ 下找到?genbindings.py 文件 终端下,通过命令行 python genbindings.py 执行文件,输出如下语句,说明环境配置成功 --------------------------------- Generating lua bindings succeeds. --------------------------------- 注:通过查看 genbindings.py 文件,可以知道生成对应的文件存放在?LearnCocosLua/frameworks/cocos2d-x/cocos/scripting/lua-bindings/auto 路径下 cmd_args = {'cocos2dx.ini' : ('cocos2d-x','lua_cocos2dx_auto'), }是将 cocos2dx.ini 生成对应的 lua_cocos2dx_auto.hpp 和 lua_cocos2dx_auto.cpp 两个文件 ,一个Lua调用C++的中间层, 相当于 JNI
.cpp 函数对应着实现就行了。 回到?LearnCocosLua/frameworks/cocos2d-x/tools/tolua/ 路径下 1.复制 cocos2dx.ini 并将其重命名为 MyClass.ini ,修改内容如下图: 2.复制?genbindings.py?并将其重命名为 MyClass.py,修改内容如下图: 对于python,大家还是可以好好学习一下的,使用性还是比较广泛的。 3.终端执行 python MyClass.py 即可在路径 LearnCocosLua/frameworks/cocos2d-x/cocos/scripting/lua-bindings/auto?下 生成对应的?lua_MyClass_auto.hpp 和?lua_MyClass_auto.cpp 两个文件 4.将 lua_MyClass_auto.hpp 和?lua_MyClass_auto.cpp 导入到工程下 5.在 AppDelegate 加入如下代码
#include "scripting/lua-bindings/auto/lua_MyClass_auto.hpp"
//register custom function
//LuaStack* stack = engine->getLuaStack();
//register_custom_function(stack->getLuaState());
register_all_MyClass(L);
6.在 MainScene.lua 下调用 C++ 方法 注意:比较坑的是,此时编译可能会报错 解决方法:把 lua_MyClass_auto.cpp 加入到如下编译资源中即可解决问题: 打包运行,效果如图所示: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |