仅以此片献给 打算/正在 把cocos2dx2.0升级到3.0的程序员们!
从网上看,3.0,好处多多,尤其是性能有很大的提升!
本人经不住诱惑,也打算把项目从2.0升级到3.0,万万没想到,唉,不说了,想想就泪崩!
第一坑:编译。
2.0到3.0改动那个大,项目编译,没有一个文件能通过,全是大片大片的Error。好吧,慢慢改,总会清理掉了。
花了4天时间,总算清除了error,当然剩下成吨的warning,就是那个否决警告,直接略过(这里要说下,如果警告过多的话,vc最后连接会失败,提示pdb文件无法访问之类的)。
不要以为编译通过,就能运行了,下面碰到更大坑。
第二坑:lua脚本
我们项目中,现在不用脚本的很少,大多数项目都会用到脚本,我们项目中也用到了lua。
2.0到3.0,lua导出方式变化非常大,一个要写pkg,一个自动。没用过3.0的,想想自动导出类给lua,太牛叉了。
笔者也一下子被忽悠了。
先安装环境,你丫的,一定要xxx版本ndk,一定要xxx版本python。我们项目已经用到最新的ndk,你还要
我回退版本,ok,从被墙的google上下了ndk。
这里特别吐槽python版本要求,丫丫的,咱项目中也用到python做工具(x64版本),你丫的一定要32版本,好吧
为了导出C++类,忍了。
按说明,配好导出工具环境,太他妈的厉害了,果然自动导出。一运行程序,操,到处都是lua的错误。
这位写工具的兄弟只实现了类和类成员函数导出,真tmd的牛叉,这样子的完成度也好意思拿出来,一年多还只是这个程度。
2.0版本虽然要写pkg,怎么说,功能上,它是一点折扣都没打。
好吧,开源的好处就是,能亲自操刀。
第三坑:自动导出C++类工具
没有最坑,只有更坑。
工具是用python+cheetah+libclang写的。你丫的,一个导出功能,在python、cheetah和conversions.yaml三个里面转来转去,
这代码怎么维护!!!!
花了1个星期,总算能支持全局函数、枚举和类成员变量导出。
如果函数的参数和返回值,有类对象指针,会有bug,导出文件编译不通过。那绕过。
如果函数参数或者返回值是结构,更操蛋的,编译通过,实际不能用…
到这里了,感觉所有的坑都填完了吧,那你就大错特错了。居然 居然,lua回调函数不支持自动导出,需要手动写。
你丫的,文档里为什么不写,为什么不写,为什么不写,写了,老子绝对不用3.0
总结:
3.0对lua脚本的支持很不成熟,如果项目中用到lua,那么建议你用2.0,不要自己改自动导出工具。
至于3.0 C++方面的引擎,没有用过不做评价(没法用,升级失败了)。
建议:
3.0既然类名和方法名都有很大变动,就甭在向下兼容了,实际上那个所谓的向下兼容,根本就不可用。
C++导出给lua,搞cocos2dx的这位仁兄,似乎你只知道tolua++,难道你不知道这世界上还有个luabind吗,
用它绝对会让你自动导出工具简单N倍。至于luabind用到了boost,只需要把那几个文件copy出来就行了。
这里要吐槽tolua++,lua脚本里大量用到了tolua.cast,你丫的,我用一个函数,还要知道这个函数是子类还是父类,或者父父父子子子类,操蛋的东东。
本人用过luabind和tolua++,luabind功能上不比tolua++差,导出方式简单(就是要手动写),写lua脚本也方便,相对于tolua++,不需要用丑陋的tolua.cast