cocos自定义类 绑定到lua

cocos自定义类 绑定到lua,第1张

概述1:按照\frameworks\cocos2d-x\tools\tolua下的README.mdown的指示一步一步做下去。务必要和文件中描述的一样,我已经被这个坑爹的东西坑的很惨了。(检查这个有没有配置好的方法是:运行下那个genbindings.py,看是否能生成liblua的auto目录下的那些文件。如果能,那么你的环境配置就成功了。) 2:写一个自定义的C++类 例子: <span sty

1:按照\frameworks\cocos2d-x\tools\tolua下的README.mdown的指示一步一步做下去。务必要和文件中描述的一样,我已经被这个坑爹的东西坑的很惨了。(检查这个有没有配置好的方法是:运行下那个genbindings.py,看是否能生成liblua的auto目录下的那些文件。如果能,那么你的环境配置就成功了。)

2:写一个自定义的C++类

例子:

<span >#pragma once#include "cocos2d.h"USING_NS_CC;class MyClass : public Ref{public:	MyClass(voID);	~MyClass(voID);	bool init() { return true; };	CREATE_FUNC(MyClass);	int foo(int i);};</span>

<span >#include "MyClass.h"MyClass::MyClass(voID){}MyClass::~MyClass(voID){}int MyClass::foo(int i){	return i + 100;}</span>

3:在\frameworks\cocos2d-x\tools\tolua目录下 可以看到很多.ini文件和一个genbindings.python文件。

随便拷贝一个.ini文件,我重命名:myclass.ini。复制一份python文件,重命名为:mygenbindings.python。

修改两个配置文件:

python文件需要做的修改:

<span > cmd_args = {'cocos2dx.ini' : ('cocos2d-x','lua_cocos2dx_auto'),\                    'cocos2dx_extension.ini' : ('cocos2dx_extension','lua_cocos2dx_extension_auto'),\                    'cocos2dx_ui.ini' : ('cocos2dx_ui','lua_cocos2dx_ui_auto'),\                    'cocos2dx_studio.ini' : ('cocos2dx_studio','lua_cocos2dx_studio_auto'),\                    'cocos2dx_spine.ini' : ('cocos2dx_spine','lua_cocos2dx_spine_auto'),\                    'cocos2dx_physics.ini' : ('cocos2dx_physics','lua_cocos2dx_physics_auto'),\                    'cocos2dx_experimental_vIDeo.ini' : ('cocos2dx_experimental_vIDeo','lua_cocos2dx_experimental_vIDeo_auto'),\                    'cocos2dx_experimental.ini' : ('cocos2dx_experimental','lua_cocos2dx_experimental_auto'),\                    'cocos2dx_controller.ini' : ('cocos2dx_controller','lua_cocos2dx_controller_auto'),\                    }</span>

变成:
<span >cmd_args = {					'myclass.ini' : ('myclass','lua_myclass_auto'),\                    }</span>

修改myclass.ini文件:

[myclass](很重要,要和文件名一样。我被这个坑了很久),这个是第一行

prefix = myclass

target_namespace = (我的没有命名空间)

headers = %(cocosdir)s/../runtime-src/Classes/MyClass.h(这是我的类路径,和AppDelegate在一起,根据你自己的路径配置吧)

classes = MyClass

后面的skip =,rename_functions = 等等都变成空的。

这样就可以生成lua和cocos中间文件了。就像lua_cocos2dx_auto.cpp和hpp那样。由于我们在python文件中没有改变中间文件的生成路径,所以应该和lua_cocosdx_auto在同一个目录下。

将我们自定义的类进行注册,在AppDelegate.cpp文件中加入一下代码:

<span >auto engine = LuaEngine::getInstance();	register_all_myclass(engine->getLuaStack()->getLuaState());//在这里加入这行代码</span>
这样就对我们的自定义类进行了注册。

对项目进行编译,发现会报错:

<pre name="code" ><span >"int __cdecl register_all_myclass(struct lua_State *)" (?register_all_myclass@@YahpAulua_State@@@Z),该符号在函数 "public: virtual bool __thiscall AppDelegate::applicationDIDFinishLaunching(voID)" (?applicationDIDFinishLaunching@AppDelegate@@UAE_NXZ) 中被引用</span>

 解决办法:将刚才生成的两个文件加入到liblua项目中去,重新生成liblua项目。搞定啦!!  

4:在lua代码中调用我们的类吧。

在hello2.lua 的main()中加入:

<span >local test = MyClass:create()print("the first cocos bind lua result "..test:foo(2))</span>



发现输出了我们要的答案。这样就完成了cocos自定义类绑定到lua中了。

总结

以上是内存溢出为你收集整理的cocos自定义类 绑定到lua全部内容,希望文章能够帮你解决cocos自定义类 绑定到lua所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1068541.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存