bindings-generator脚本的使用:
1、写自己的C++类,按照Cocos2d-x的规矩,继承cocos2d::Ref类,以便使用Cocos2d-x的内存回收机制。当然不这么干也行,但是不推荐,不然在Lua环境下对象的释放狠麻烦。
2、编写一个.ini文件,让bindings-generator可以根据这个配置文件知道C++类该怎么暴露出来
3、修改bindings-generator脚本,让它去读取这个.ini文件
4、执行bindings-generator脚本,生成桥接C++类方法
5、用Xcode将自定义的C++类和生成的桥接文件加入工程,不然编译不到
6、修改AppDelegate.cpp,执行桥接方法,自定义的C++类就注册进Lua环境里了
第一步:自定义c++类,存放于classes目录下,
第二步:编写.ini文件 在frameworks/cocos2d-x/tools/lua/目录下能看到genbindings.py脚本和一大堆.ini文件,这些就是bindings-generator的实际执行环境了。随便找一个内容比较少的.ini文件,复制一份,重新命名为MyClass.ini。大部分内容都可以凑合不需要改,这里仅列出必须要改的重要部分:
frameworks/cocos2d-x/tools/tolua/MyClass.ini
[MyClass]
prefix = MyClass
target_namespace = cc
headers = %(cocosdir)s/…/runtime-src/Classes/MyClass.h
classes = MyClass
注意:这个地方我踩了个坑。如果.ini配置文件中存在macro_judgement = …宏定义,要特别小心,我第一次是从cocos2dx_controller.ini文件复制来的,结果没注意macro_judgement,导致生成的桥接类文件加入了不该加入的宏,只在iOS和Android平台上才起作用,对Mac平台无效,这个要特别注意。
第三步:修改genbindings.py文件129行附近,将MyClass.ini文件加进去:
frameworks/cocos2d-x/tools/tolua/genbindings.py
cmd_args = {‘cocos2dx.ini’ : (‘cocos2d-x’, ‘lua_cocos2dx_auto’),
‘MyClass.ini’ : (‘MyClass’, ‘lua_MyClass_auto’),
…
(其实这一步本来是可以省略的,只要让genbindings.py脚本自动搜寻当前目录下的所有ini文件就行了)
第四步:cd到genbindings.py的目录,执行
python genbindings.py
成功执行genbindings.py脚本后,会在frameworks/cocos2d-x/cocos/scripting/lua-bindings/auto/目录下看到新生成的文件lua_MyClass_auto.hpp.
执行python脚本时会缺少yaml cheetah包,使用easy_install pip安装的pip可能会出问题,建议去github下载https://github.com/pypa/pip.git
下载完成后在终端cd到setup.py目录 运行sudo python setup.py install 成功安装pip后,使用pip install 下载对应包
第五步:在frameworks/cocos2d-x/cocos/scripting/lua-bindings/auto/找到自己的c++桥梁文件,加入xcode,
第六步:在appdelegate.cpp文件中添加头文件以及加入register_all_MyClass的调用
然后在对应的lua文件中通过cc.类名调用c++方法(cc可通过.ini文件的target_namespace设置)
原文地址:https://www.cnblogs.com/xiaonanxia/p/4987856.html
|
请发表评论