cocos2d-x3.0版本c++类的lua绑定

来源:互联网 发布:惊艳的句子 知乎 编辑:程序博客网 时间:2024/04/29 19:48

这周看了一下lua绑定的各种帖子和方法,从3.0开始好像绑定方法变成自动的了,但是官方文档含糊不清,步骤也不全面,被坑了两天,整个过程唯呵呵二字才能概括我内心悲愤。现在在这里总结一下整个绑定过程吧。


一、环境配置

首先,根据官方文档描述的环境进行配置和安装: 【教程分享】Cocos2d-x 3.0 RC lua绑定教程 及 新特性介绍

里面的那个pyCheetah的链接是坏的,非常坑爹,不过搜索一下,可以在这里下载到:https://pypi.python.org/pypi/Cheetah/2.4.4

下载下来之后解压,在解压目录执行
python setup.py build
python setup.py install

即可。这是第一坑。


二、自动生成lua_myclass_auto

然后,搜遍全google感觉最详细最靠谱的一个帖子是这一个,【教程分享】cocos2dx3.0rc导出自定义类到lua的方法详细步骤

根据里面描述的过程,一步一步做下来,假如幸运的话,可以一口气做到第四步成功执行python genbidings_myclass.py,可惜应该有无数勇士死在了这一步骤……

列举几个注意要点,如果不成功,需要仔细检查以下内容:

1. NDK必须必须必须是r9b版本,务必检查系统的环境变量(windows下)是否正确填写了NDK_ROOT

况且,还有我这种坑爹的,有一个是系统变量一个是用户变量,我改了下方的系统变量之后非常疑惑为什么一直不生效。(因为每次运行python genbidings_myclass.py以后,我查看跟自己写的那个ini同一目录下的userdata.ini,里面有一个变量NDK_ROOT总是会被修改回旧的变量r9d)

改好变量之后,需要重启电脑才能生效貌似,反正我重启了才生效的。

PS:假如像我一样,想要下载r9b版本但是四处下载不到,发现网站各种被墙没关系,打开这个链接,用迅雷下载:http://dl.google.com/android/ndk/android-ndk-r9b-windows-x86_64.zip(如果版本不同的话,可以自行搜索下载链接)。但反正如果发现下载不下来的情况,可以找迅雷拯救你。


2. 如果出现的exception内容是  Exception("Section not found in config file")

这个非常简单,意思是你写的ini文件的最顶端那个[myclass]没有改写成你自己的内容,需要自己检查一下每个地方这一个名称的一致性。在myclass.ini里面,以及genbings_myclass.py里面填写的配置需要保持名称的一致性。


3. 最最最最最恶心的问题,就是出现提示 

raise Exception("Fatal error in parsing headers")
Exception: Fatal error in parsing headers

简直呵呵!!!!!!!!!!!!!!!!!!!!!!

这个问题的出现,主要原因是在ini配置文件里的cocos_headers这一个字段,有一些必要的路径没有被添加进来。我看到有个网友回帖就写了那么一句“缺少什么文件,就把它加进ini里面”,但是具体描述完全木有,导致我一直都还以为是ndk版本的问题!

其实解决方法也很简单,仔细看exception的描述,一般都是提示某个文件找不到,比如内容是这样的:

<severity = Fatal,location = <SourceLocation file '../../../Evo/include/TalkWidgety.h', line 38, column 10>,details = <span style="color:#ff0000;">"'cocos2d.h' file not found</span>">

找不到哪个文件,就去搜索一下它的位置,然后把它所在的路径仿照着ini文件里cocos_headers原有值的样子添加到后面。比如我当时是提示缺少了一个ccPlatformDefine.h,那就搜了一下之后,添加了一个-I%(cocosdir)s/cocos/platform/android这样的东西在后面,就不再报这个错了。

(妈蛋网上所有的帖子你们能描述得再详细一点么对新手实在是太不友好了啊)


4. ini配置文件的各个选项确实可以照着网上别人提供的内容抄,不过具体每个选项的内容意思,可以参考这里: 如何使用 bindings-generator 自动生成 lua绑定

这是官方的wiki,所以很详细地解释了文件的内容,有需要的情况下可以参考。


5. 其余错误,可以参考这个帖子cocos2d-x 3.0rc0 - bindings-generator 问题与解决

因为其他问题我就没再遇到过了,所以放在这里供以后参考。


三、把生成的内容加入lua

费尽千辛万苦搞出了两个自动生成的hpp和cpp文件以后,我以为从此一路太平了,但事实证明还是图样图森破…………

刚才提到的那个史上最详细的教程,最后还是功亏一篑在了两个错别字上,我对着这一句话整整琢磨了非常非常久:

“然后把里面生成lua_myclass_auto.cpp和lua_myclass_auto.hpp加入拽如工程”


掀桌!!!!拽如工程是什么?能再讲详细一点好不好啊大哥!!!!

于是我无视掉这一句话直接进入下一步编辑AppDelegate.cpp的步骤,include完了头文件,加入了那一句register_all_xx,但是编译运行之后还是无情提示——

AppDelegate.obj : error LNK2019: 无法解析的外部符号


其实只是因为欠缺了两个步骤,一个是,自己新建出来的那个myclass.cpp和.h文件,必须要添加到工程里面去。还有一个是,自动生成好的那两个lua_myclass_auto.xx文件,也需要添加进工程里:



至此,编译终于成功,流下了感动的泪水………………


四、在Lua里面直接调用刚才新增加的类

按照教程,这里已经大功告成了。


================================

2014.7.28 补充:

在cocos code IDE里面要加入自定义的c++类lua biding的话,有官方文档可以参考:  http://www.cocos2d-x.org/wiki/Binding_Custom_Class_To_Lua_Runtime

1 0
原创粉丝点击