在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
本文主要介绍mac上,如何将自定义的c++类,绑定到lua。 1、工具先行 找到 你的cocos2d-x/tools/tolua++,里面文件按类型大致分为: (1)*.pkg:用于定义要绑定的c++类,暴露哪些接口。 (2)*.lua:用于定义生成的lua绑定文件,都使用哪些转换规则。 (3)*.sh:使用tolua++,根据.lua中的规则,将.pkg中定义的类,输出为包含绑定接口的.cpp文件。 (4)README文件,这个比较重要,涉及到pkg文件要使用的具体规则。 2、pkg (1)通常为项目定义一个总的pkg文件,里面包含项目中具体使用的class的pkg文件。即 test_project.pkg: 1 1 $pfile "class_A.pkg" 2 2 $pfile "class_B.pkg" (2)具体每个class文件,遵循README。看看内容: 1 1) enum keeps the same 2 2) remove CC_DLL for the class defines, pay attention to multi inherites 3 3) remove inline keyword for declaration and implementation 4 4) remove public protect and private 5 5) remove the decalration of class member variable 6 6) keep static keyword 7 7) remove memeber functions that declared as private or protected 大体一看就懂,简单翻译如下: 1 1)枚举不变 2 2)去掉类定义中的 CC_DLL ,注意多继承(?) 3 3)去掉声明和实现中的 inline 关键字 4 4)去掉public、protected、private关键字 5 5)去掉类成员变量的声明 6 6)保留static关键字 7 7)去掉限定为private或protected的方法 比如,class_A.pkg: 1 class class_A : public cocos2d::CCObject 2 { 3 /** 这是一个关于绑定c++到lua的例子1 4 * 5 */ 6 static std::string test1(const char *name); 7 8 /** 这是一个关于绑定c++到lua的例子2 9 * 10 */ 11 void test2(); 12 };
3、lua 这个可以参考basic.lua或basic_cocostudio.lua,可以直接复制一份,改名为test_project.lua。解释一下需要关注的部分: (1)CCObjectTypes 是一个放置要绑定的类型名称的数组 1 local CCObjectTypes = { 2 "class_A", 3 "class_B", 4 } (2)下面很长一段,都是关于绑定接口文件,自动生成的规则,我们主要关注 #include 这部分即可。 1 replace([[#ifndef __cplusplus 2 #include "stdlib.h" 3 #endif 4 #include "string.h" 5 6 #include "tolua++.h"]], 7 [[ 8 9 extern "C" { 10 #include "tolua_fix.h" 11 } 12 13 #include <map> 14 #include <string> 15 16 #include "class_A.h" 17 #include "class_B.h" 18 ]])
4、sh 可以直接复制一份basic.sh,然后修改对应的文件名称:.lua、.cpp、.h、.pkg 1 #!/bin/bash 2 # 3 # Invoked build.xml, overriding the lolua++ property 4 5 SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) 6 TOLUA=`which tolua++` 7 if [ -z "${TOLUA}" ]; then 8 TOLUA=`which tolua++5.1` 9 fi 10 11 if [ -z "${TOLUA}" ]; then 12 echo "Unable to find tolua++ (or tolua++5.1) in your PATH." 13 exit 1 14 fi 15 16 cd ${SCRIPT_DIR} 17 ${TOLUA} -L test_project.lua -o ../../scripting/lua/cocos2dx_support/LuaTestProject.cpp -H ../../scripting/lua/cocos2dx_support/LuaTestProject.h 18 test_project.pkg 简单解释各个参数的含义:
•/tolua++ :lua绑定工具
•-L:lua文件(.lua)
•-o:生成文件(.cpp)
•-H:生成头文件(.h)
•最后,使用的pkg文件
如果,脚本运行时,提示“环境里无法找到 tolua++”。可以将 ${TOLUA} 直接写成 ./tolua++
小结:
为了不与cocos2d-x自带的内容发生混淆,在 你的cocos2d-x/tools/tolua++/ 路径下,新建目录“你的项目名称”,然后按上面的方法,配置好 pkg,lua,sh的内容。运行sh即可。
下面是我改的一个脚本,tolua++运行后,会打开生成的绑定代码文件所在路径。
1 #!/bin/bash 2 # 3 # Invoked build.xml, overriding the lolua++ property 4 5 SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) 6 echo ${SCRIPT_DIR} 7 cd ${SCRIPT_DIR} 8 ../tolua++ -L test.lua -o ../../../scripting/lua/cocos2dx_support/LuaTest.cpp -H ../../../scripting/lua/cocos2dx_support/LuaTest.h test.pkg 9 open ../../../scripting/lua/cocos2dx_support 绑定好的cpp文件,如何在工程中使用,参考:cocos2dx-lua绑定自定义c++类(二)
|
请发表评论