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


工程下新建我们自己的 C++ 文件:


.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 加入到如下编译资源中即可解决问题:



打包运行,效果如图所示:

相关文章

相关标签/搜索