在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
cocos 使用bindings-generator脚本代替了toLua++. 编写效率大大提高。 具体的在本机中分享:http://note.youdao.com/noteshare?id=0f4132271151c4b62f9afb712e8304d9 bindings-generator脚本的工作机制是: 1、不用挨个类地写桥接.pkg和.h文件了,直接定义一个ini文件,告诉脚本哪些类的哪些方法要暴露出来,注册到Lua环境里的模块名是什么 bindings-generator脚本掌握了生成toLua++桥接代码的主动权,不仅可以省下大量的.pkg和.h文件,而且可以更好地插入自定义代码,达到cocos2d-x环境下的一些特殊目的,比如内存回收之类的。 接下来说怎么用bindings-generator脚本: 1、写自己的C++类,按照cocos2d-x的规矩,继承cocos2d::Ref类,以便使用cocos2d-x的内存回收机制。 看着步骤挺多,其实都狠简单。下面一步一步来。 1.首先是自定义的C++类。我习惯将文件保存在frameworks/runtime-src/Classes/目录下: frameworks/runtime-src/Classes/MyClass.h
frameworks/runtime-src/Classes/MyClass.cpp
2.然后编写.ini文件。在frameworks/cocos2d-x/tools/tolua/目录下能看到genbindings.py脚本和一大堆.ini文件,这些就是bindings-generator的实际执行环境了。随便找一个内容比较少的.ini文件,复制一份,重新命名为MyClass.ini。大部分内容都可以凑合不需要改,这里仅列出必须要改的重要部分: frameworks/cocos2d-x/tools/tolua/MyClass.ini
也即在MyClass.ini中指定MyClass.h文件的位置,指定要暴露出来的类,指定注册进Lua环境的模块名。 然后修改genbindings.pyMyClass.ini文件加进去: 3.frameworks/cocos2d-x/tools/tolua/genbindings.py
4.至此,生成桥接文件的准备工作就做好了,执行genbindings.py脚本:
成功执行genbindings.py脚本后,会在frameworks/cocos2d-x/cocos/scripting/lua-bindings/auto/目录下看到新生成的文件: 每次执行genbindings.py脚本时间都挺长的,因为它要重新处理一遍所有的.ini文件,建议大胆修改脚本文件,灵活处理,让它每次只处理需要的.ini文件就可以了,比如像这个样子: 在frameworks/cocos2d-x/cocos/scripting/lua-bindings/auto/目录下观察一下生成的C++桥接文件lua_MyClass_auto.cpp,里面的注册函数名字为register_all_MyClass(),这就是将MyClass类注册进Lua环境的关键函数: 5.编辑frameworks/runtime-src/Classes/AppDelegate.cpp文件,首先在文件头加入对lua_MyClass_auto.hpp文件的引用: 然后在正确的代码位置加入对register_all_MyClass函数的调用: 如何是lua工程则在:lua_module_register.h 中添加上述调用。 最后在执行编译前,将新加入的这几个C++文件都加入到Xcode工程中,使得编译环境知道它们的存在: 这其中还有一个小坑,由于lua_MyClass_auto.cpp文件要引用MyClass.h文件,而这俩文件分属于不同的子项目,互相不认识头文件的搜寻路径,因此需要手工修改一下cocos2d_lua_bindings.xcodeproj子项目的User Header Search Paths配置。特别注意一共有几个../: 最后,就可以用cocos compile -p mac命令重新编译整个项目了,不出意外的话编译一定是成功的。 修改main.lua文件中,尝试调用一下MyClass类:
配置ini时需要注意的选项:
文章编辑格式copy自己的有道云笔记,格式太乱。但是笔记可以以看得。如下笔记讲述的是原理和过程。
http://note.youdao.com/noteshare?id=142d2127d439b820f0aeeaf28631d0f5
http://note.youdao.com/noteshare?id=1d2703cd69de404e7237c44097696e02 作者:Four 链接:https://www.zhihu.com/question/35082562/answer/129615490 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 |
请发表评论