
本文主要介绍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"View Code
(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 protectedView Code
大体一看就懂,简单翻译如下:
1 1)枚举不变 2 2)去掉类定义中的 CC_DLL ,注意多继承(?) 3 3)去掉声明和实现中的 inline 关键字 4 4)去掉public、protected、private关键字 5 5)去掉类成员变量的声明 6 6)保留static关键字 7 7)去掉限定为private或protected的方法View Code
比如,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 };
View Code
3、lua
这个可以参考basic.lua或basic_cocostudio.lua,可以直接复制一份,改名为test_project.lua。解释一下需要关注的部分:
(1)CCObjectTypes 是一个放置要绑定的类型名称的数组
1 local CCObjectTypes = {
2 "class_A",
3 "class_B",
4 }
View Code
(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 ]])
View Code
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
View Code
简单解释各个参数的含义:
•/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
View Code
绑定好的cpp文件,如何在工程中使用,参考:cocos2dx-lua绑定自定义c++类(二)