cocos2dx-lua绑定自定义c++类(一)
来源:互联网 发布:农村淘宝店开店条件 编辑:程序博客网 时间:2024/06/05 14:06
本文主要介绍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:
$pfile "class_A.pkg" $pfile "class_B.pkg"
(2)具体每个class文件,遵循README。看看内容:
1) enum keeps the same2) remove CC_DLL for the class defines, pay attention to multi inherites3) remove inline keyword for declaration and implementation4) remove public protect and private5) remove the decalration of class member variable6) keep static keyword7) remove memeber functions that declared as private or protected
大体一看就懂,简单翻译如下:
1)枚举不变2)去掉类定义中的 CC_DLL ,注意多继承(?)3)去掉声明和实现中的 inline 关键字4)去掉public、protected、private关键字5)去掉类成员变量的声明6)保留static关键字7)去掉限定为private或protected的方法
比如,class_A.pkg:
class class_A : public cocos2d::CCObject{ /** 这是一个关于绑定c++到lua的例子1 * */ static std::string test1(const char *name); /** 这是一个关于绑定c++到lua的例子2 * */ void test2();};
3、lua
这个可以参考basic.lua或basic_cocostudio.lua,可以直接复制一份,改名为test_project.lua。解释一下需要关注的部分:
(1)CCObjectTypes 是一个放置要绑定的类型名称的数组
local CCObjectTypes = { "class_A", "class_B",}
(2)下面很长一段,都是关于绑定接口文件,自动生成的规则,我们主要关注 #include 这部分即可。
replace([[#ifndef __cplusplus#include "stdlib.h"#endif#include "string.h"#include "tolua++.h"]], [[extern "C" {#include "tolua_fix.h"}#include <map>#include <string>#include "class_A.h"#include "class_B.h"]])
4、sh
可以直接复制一份basic.sh,然后修改对应的文件名称:.lua、.cpp、.h、.pkg
#!/bin/bash## Invoked build.xml, overriding the lolua++ propertySCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)TOLUA=`which tolua++`if [ -z "${TOLUA}" ]; then TOLUA=`which tolua++5.1`fiif [ -z "${TOLUA}" ]; then echo "Unable to find tolua++ (or tolua++5.1) in your PATH." exit 1ficd ${SCRIPT_DIR}${TOLUA} -L test_project.lua -o ../../scripting/lua/cocos2dx_support/LuaTestProject.cpp -H ../../scripting/lua/cocos2dx_support/LuaTestProject.h 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++运行后,会打开生成的绑定代码文件所在路径。
#!/bin/bash## Invoked build.xml, overriding the lolua++ propertySCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)echo ${SCRIPT_DIR}cd ${SCRIPT_DIR}../tolua++ -L test.lua -o ../../../scripting/lua/cocos2dx_support/LuaTest.cpp -H ../../../scripting/lua/cocos2dx_support/LuaTest.h test.pkgopen ../../../scripting/lua/cocos2dx_support
绑定好的cpp文件,如何在工程中使用,参考:cocos2dx-lua绑定自定义c++类(二)
- cocos2dx-lua绑定自定义c++类(一)
- cocos2dx 自定义绑定lua
- cocos2dx-lua绑定自定义c++类(二)
- cocos2dx lua学习笔记 <一> quick 3.5把自定义C++类绑定到lua
- 【绑定自定义类至Lua】(一)环境搭建
- cocos2dx 3.3 lua 绑定类
- cocos2dx luabind(绑定自定义类)
- cocos2dx-lua lua-binding只绑定函数,不绑定类
- cocos2dx的lua绑定
- cocos2dx的lua绑定
- cocos2dx的lua绑定
- cocos2dx 3.2 lua绑定
- Cocos2dx(3.3)绑定lua
- cocos2dx的lua绑定
- Cocos2dx lua绑定C++
- cocos2dx lua绑定
- cocos2dx C++绑定lua
- 【步兵 cocos2dx】lua绑定
- RS485通信-单独通不乱,到系统里就有乱码---从机回复过快乱码
- python day04
- Java——Java集合Collections工具类
- List User Messages:列出用户消息
- 史上最全的 struts2 面试题
- cocos2dx-lua绑定自定义c++类(一)
- springboot整合swagger
- hdu 6121 Build a tree (图论)
- 链家笔试题总结
- mysql 存储过程及事务实例
- RPC原理
- CSS布局模型----第八系列
- C语言指针和数组
- 学生做国际义工:时尚背后有多少坑