使用cocos2d-x tolua++工具导出自定义类到lua脚本环境
2014-07-12 18:50
519 查看
本人学习cocos2d-x tolua++使用时,从网上搜到的相关学习资料大多数是介绍用tolua++工具将自定义类导出生成到cocos2d-x-2.2.3\scripting\lua\cocos2dx_support目录下的LuaCocos2d.cpp源文件里,这样做将会带来日后更新cocos2d-x引擎带来麻烦,所以本文介绍的是另一种导出方式,在不影响原生引擎的目录下导出自定义类,具体步骤如下:
1.创建自己的自定义类
2.创建用来与lua交互的中间类(“.h“文件由自己编写“.cpp”文件由tolua++工具生成)
3.创建自定义类的pkg文件
4.创建用于生成中间类“.cpp”文件的pkg文件
5.创建批处理文件,用于生成中间类“.cpp”
6.将我们的module注入到LuaScriptEngine里
现在逐步实现上面的步骤:
1.创建自己的自定义类
将这个类test2lua.h创建在自己新建的工程Classes目录下,为了方便我就把定义跟实现写在头文件里了,如下代码
2.创建用来与lua交互的中间类(“.h“文件由自己编写“.cpp”文件由tolua++工具生成)
先创建一个用于生成的目录“module”(名字随便取)该目录可建在任意地方,我建在了与Classes文件夹同级,然后在目录下创建“LuaModule.h”文件,代码如下
3.创建自定义类的pkg文件
在这里要说明一下创建pkg文件内容的规则,在cocos2d-x-2.2.3\tools\tolua++目录下的README文件已经有说明,内容如下
1) enum keeps the same //枚举不变
2) remove CC_DLL for the class defines, pay attention to multi inherites //移除掉定义的类的CC_DLL宏(我们自定义的类其实没有),注意多重继承
3) remove inline keyword for declaration and implementation //移除inline关键字
4) remove public protect and private //移除public protect 和 private关键字
5) remove the decalration of class member variable //移除成员变量
6) keep static keyword //保留static关键字
7) remove memeber functions that declared as private or protected //移除掉保护和私有的成员函数
遵照上面7点规则我们将test2lua.h自定义类写成pkg文件,我们可以拷贝之前写的内容到新创建的test2lua.pkg文件里,根据规则去整理内容后,如下代码
4.创建用于生成中间类“.cpp”文件的pkg文件
在module目录下创建LuaModule.pkg文件,里面内容如下
5.创建批处理文件,用于生成中间类“.cpp”
创建批处理文件为了方便,不用每次打开cmd控制台去敲命令,在build.bat文件里输入tolua++ -o "LuaModule.cpp" LuaModule.pkg命令保存即可,然后我们要到cocos2d-x-2.2.3\tools\tolua++目录下拷贝一个文件tolua++.exe(是从tolua++.rar解压出来的)到module目录下。之后我们双击build.bat文件执行命令生成“LuaModule.cpp”中间类。到现在我们执行了以上步骤后module文件夹下会有这些文件(build.bat
tolua++.exe test2lua.pkg LuaModule.pkg LuaModule.h LuaModule.cpp)。将LuaModule.h和LuaModule.cpp文件拷贝到classes目录下,导入到工程。
6.将我们的module注入到LuaScriptEngine里
打开AppDeletegate.cpp,找到CCLuaEngine* pEngine = CCLuaEngine::defaultEngine();这一行,在后面追加一行tolua_LuaModule_open(tolua_s);同时加入LuaModule.h头文件,最后编译下工程。之后我们就可以在lua文件里加入自己的自定义类了。
1.创建自己的自定义类
2.创建用来与lua交互的中间类(“.h“文件由自己编写“.cpp”文件由tolua++工具生成)
3.创建自定义类的pkg文件
4.创建用于生成中间类“.cpp”文件的pkg文件
5.创建批处理文件,用于生成中间类“.cpp”
6.将我们的module注入到LuaScriptEngine里
现在逐步实现上面的步骤:
1.创建自己的自定义类
将这个类test2lua.h创建在自己新建的工程Classes目录下,为了方便我就把定义跟实现写在头文件里了,如下代码
#ifndef __TEST2LUA_H__ #define __TEST2LUA_H__ class CTest2Lua { public: CTest2Lua(int number) :_number(number) {} ~CTest2Lua(){} void setNumber(int number){ _number = number; } int getNumber(){ return _number; } private: int _number; }; #endif // __TESTLUA_H__
2.创建用来与lua交互的中间类(“.h“文件由自己编写“.cpp”文件由tolua++工具生成)
先创建一个用于生成的目录“module”(名字随便取)该目录可建在任意地方,我建在了与Classes文件夹同级,然后在目录下创建“LuaModule.h”文件,代码如下
#ifndef __LUAMODULE_H__ #define __LUAMODULE_H__ extern "C" { #include "tolua++.h" #include "tolua_fix.h" } #include "test2lua.h"//添加自定义类头文件 TOLUA_API int tolua_LuaModule_open(lua_State* tolua_S);//用于在AppDeletegate.cpp文件下注册</span> #endif
3.创建自定义类的pkg文件
在这里要说明一下创建pkg文件内容的规则,在cocos2d-x-2.2.3\tools\tolua++目录下的README文件已经有说明,内容如下
1) enum keeps the same //枚举不变
2) remove CC_DLL for the class defines, pay attention to multi inherites //移除掉定义的类的CC_DLL宏(我们自定义的类其实没有),注意多重继承
3) remove inline keyword for declaration and implementation //移除inline关键字
4) remove public protect and private //移除public protect 和 private关键字
5) remove the decalration of class member variable //移除成员变量
6) keep static keyword //保留static关键字
7) remove memeber functions that declared as private or protected //移除掉保护和私有的成员函数
遵照上面7点规则我们将test2lua.h自定义类写成pkg文件,我们可以拷贝之前写的内容到新创建的test2lua.pkg文件里,根据规则去整理内容后,如下代码
class CTest2Lua { CTest2Lua(int number); ~CTest2Lua(); void setNumber(int number); int getNumber(); };
4.创建用于生成中间类“.cpp”文件的pkg文件
在module目录下创建LuaModule.pkg文件,里面内容如下
$#include "LuaModule.h" $pfile "test2lua.pkg"
5.创建批处理文件,用于生成中间类“.cpp”
创建批处理文件为了方便,不用每次打开cmd控制台去敲命令,在build.bat文件里输入tolua++ -o "LuaModule.cpp" LuaModule.pkg命令保存即可,然后我们要到cocos2d-x-2.2.3\tools\tolua++目录下拷贝一个文件tolua++.exe(是从tolua++.rar解压出来的)到module目录下。之后我们双击build.bat文件执行命令生成“LuaModule.cpp”中间类。到现在我们执行了以上步骤后module文件夹下会有这些文件(build.bat
tolua++.exe test2lua.pkg LuaModule.pkg LuaModule.h LuaModule.cpp)。将LuaModule.h和LuaModule.cpp文件拷贝到classes目录下,导入到工程。
6.将我们的module注入到LuaScriptEngine里
打开AppDeletegate.cpp,找到CCLuaEngine* pEngine = CCLuaEngine::defaultEngine();这一行,在后面追加一行tolua_LuaModule_open(tolua_s);同时加入LuaModule.h头文件,最后编译下工程。之后我们就可以在lua文件里加入自己的自定义类了。
local num1 = CTest2Lua:new(3) local num2 = CTest2Lua:new(6) print("number1:"..num1:getNumber()) print("number2:"..num2:getNumber())如果没什么问题就能打印出内容。
相关文章推荐
- cocos2d-x-lua如何导出自定义类到lua脚本环境
- Quick-Cocos2d-x 使用tolua工具导出C++的类给Lua调用
- Quick-Cocos2d-x 使用tolua工具导出C++的类给Lua调用
- cocos2d-x-lua如何导出自定义类到lua脚本环境
- Quick-Cocos2d-x 2.26 使用tolua工具导出C++的类给Lua调用WINDOWS篇
- Quick-Cocos2d-x 使用tolua工具导出C++的类给Lua调用
- Quick-Cocos2d-x 使用tolua工具导出C++的类给Lua调用
- Quick-Cocos2d-x 使用tolua工具导出C++的类给Lua调用
- Quick-Cocos2d-x 使用tolua工具导出C++的类给Lua调用
- cocos2d-x-lua如何导出自定义类到lua脚本环境
- 使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
- 使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
- tolua++快速将我们自定义的c2dx类嵌入,供 lua脚本使用
- 【COCOS2DX-LUA 脚本开发之四】使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
- 【COCOS2DX-LUA 脚本开发之四】使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
- 使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
- 使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
- 【COCOS2DX-LUA 脚本开发之四】使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
- 【COCOS2DX-LUA 脚本开发之四】使用tolua++编译pkg,从而创建自定义类让Lua脚本使用
- 使用tolua++编译pkg,从而创建自定义类让Lua脚本使用