cocos2dx Lua工程调用C++ 详细操作步骤

前端之家收集整理的这篇文章主要介绍了cocos2dx Lua工程调用C++ 详细操作步骤前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一、个人对“绑定”这词有两种理解
1、lua绑定到C++,就是C++能调用到lua的东西,那必须让C++知道有哪些lua函数或变量可以用
2、C++绑定到lua,就是lua能调用到C++的东西,当然也必须让lua知道有哪些C++东东可以给lua调用,所谓的“暴露”


这里说的绑定就是第2种情况,在lua中能调用到Cocos2dx的函数
Cocos2dx通过工程里面的tools/toLua工具生成注册C++函数到lua的函数cpp文件
二、环境设置

工具:

cocos2dx 3.8.1

NDK_ROOT 必须为android-ndk-r9d 64bit版
Python 为32bit版,2.7.3版(因为有个插件是32位的(Cheetah),如果这个插件有64的,个人觉得用python64位没问题)

python插件:Cheetah、PyYAML(3.10以上版本、有32、64可选,但现在必选32)
PS:安装必要的库和工具包,以及配置相关环境变量,请按照cocos2d-x-3.0rc0\tools\tolua\README.mdown说得去做,不做赘述。

-----------------------------------------绑定环境配置好之后测试--------------------------------------------

1.创建纯cocos2dx lua工程:cocos new LuaTest -p com.chiu.hellolua -l lua -d D:\XXXXX,将2dx sdk下的tools文件夹拷至LuaTest frameworks cocos2d-x 下,原本生成的项目该文件夹是不全的,没有绑定的脚本等等。

2.编写测试Cpp类TestCpp





3.编写绑定脚本genbindings.py(可重命名)和.ini配置

a.tolua++ 工具的路径:tolua_root = '%s/tools/tolua' % project_root 运行脚本放到tools文件夹下此处不用修改

b.输出绑定生成文件(.cpp和.hpp)路径(根据需要修改,此处是我自己的):‘%s/tests/lua-empty-test/project/Classes/auto’ % project_root

c.修改cmd_args参数:第一个参数是ini文件名(我的是'testCpptoLua.ini'),第二个参数包含两部分,第一部分对应ini文件首行内容,如[cocos2dx].一般是第一行,形如 我的参数cmd_args={'testCpptoLua':('testCpptoLua','lua_testCpptoLua_auto')},含义就是查找testCpptoLua.ini中的[testCpptoLua]字段配置,最后生成的.hpp .cpp以 lua_testCpptoLua_auto命名。如果第二个参数对应不上,会出现Section not found in configfile的错误

d..ini文件修改:prefix 关系到lua函数开头的名字,如此处我测试用例则写prefix=testCpptoLua. 那么上述所说绑定生成的.hpp .cpp则以lua_testCpptoLua开头。另 外,ini还需修改的字段是headers,即为需要绑定生成的C++类头文件地址,如我写的:headers = %(cocosdir)s/../Classes/TestCpp.h,也就是放在工程Classes文件 夹下。最后修改的字段为classes,也就是你绑定的C++类名,如我的写:classes = TestCpp. 注意PS:headers和classes配置多个类,headers用%字符连接.h,classes用*连接多个类名 ,有多个就写多少个


4.当前目录下运行cmd,并执行脚本命令: python genbindings.py,如出现bindings succeeds说明生成成功。如提示Fails,则说明失败,根据错误提示修改.py 或者 .ini配置文件


5.将生成的lua_testCpptoLua_auto.hpp lua_testCpptoLua_auto.cpp 以及原C++ TestCpp.h TestCpp.cpp四个文件拷贝到Classes目录下(当然地址可以随意放置,只需在工程添加正确的引用位置即可),并添加四个文件到工程Classes下


6.注册TestCpp类接口给lua

在需要使用TestCpp的地方添加文件

<span style="font-family:Microsoft YaHei;font-size:14px;">#include "lua_testCpptoLua_auto.hpp"</span>
注册TestCpp类:
<span style="font-family:Microsoft YaHei;font-size:14px;">register_all_testCpptoLua(stack->getLuaState());</span>

6.在lua代码中加入测试调用TestCpp的方法,纯lua的cocos2dx 工程可以看到Appdelegate是执行了engine->executeScriptFile("src/main.lua"),所以在main.lua下加入测试代码即可:

local function main()
require("app.MyApp"):create():run()

local test = TestCpp:create("GuoKun Chiu");
test:printCurName();

end

7.测试结果会打印出:TestCpp success,cur name is GuoKun Chiu

猜你在找的Cocos2d-x相关文章