(在8楼有关于楼主提到的所有问题的解决方案)
下面 cocos2d-x 简称为 2dx , CocoStudio 简称为 cs
公司一个项目从一开始写就是用 2dx 3.3正式版的,但今天遇几个棘手问题,我决定降到 3.2。特发此文总结下。
-
2dx 3.3 无法完全匹配 cs 1.6 做的骨骼动画文件。
一个月前,项目还是用 3.2 来做,当时用 cs 1.6 来做骨骼动画和UI。现在新的一个小项目,我用了3.3,因为一些动画资源是公用的,所以,我会复用之前 cs1.6 导出的骨骼动画。2dx 3.3 使用 cs 1.6 在一般情况下没问题,载入UI,普通动画等。但在一种情况下,会引发程序崩溃,就是读入 cs 1.6 导出的嵌入粒子特效的动画,在读入*.ExportJson动画数据文件时,就会崩溃。调试追踪,发现 3.3 的载入程序会把粒子特效的 *.plist 文件认为是纹理配置文件。 -
考虑使用 cs 2.0.6 来做骨骼动画,但 cs 2.0 和 2dx 3.3 配合强差人意。
頀方的说法,2dx 3.3 完全配套的 cs 是 cs 2.0.6。遂下载 2.0.6 来研究看看。在学习尝试使用的过程中,发现 2dx 3.3 使用 cs 2.0.6 有重大缺陷:无法显示界面。就连 cs 导出附带的例子工程都不能显示界面。又是调试追踪,最终发现原因: 2dx 3.3 载入 cs 2.0.6 导出的资源使用的是相对路径。比如:有一个 Sprite 结点引用的是 f1.png 这个图片。在 3.3 的载入代码中,就是 Sprite::setTexture( “f1.png” ) ; 这样载入。如果导出的资源放在工程的 Resources 根目录下,这样载入没问题。但若我新建一个文件夹,例如:Resources/Ui 来专门存放UI的导出资源,就会有问题。因为,3.3的资源载入代码不会跑到 Ui 这个文件夹中去找 f1.png 图片,而还是用“f1.png"这个路径去载入。这样载入,当然是失败的,所以,界面无法显示。
在 2dx 3.3 中使用 cs 2.0.6 导出的资源就有了一个限制:必须放到工程 Resources 根目录下。否者,精灵图片就会因为路径问题,载入失败,不显示界面。 -
cs 2.0.6 的动画制作功能很不成熟,2dx 3.3 使用其资源也不成熟。
cs 2.0 的动画制作功能弱于 cs 1.6 很多,cs 1.6 的很多功能在 2.0 中都没有。
且 2dx 3.3 使用 cs 2.0 导出的动画也很麻烦,要创建2个结点,结点1再runAction结点2,才能运行动画。而且,目前只支持指定动画帧数范围的使用方法,不支持用名字调用指定动画。 -
2dx 3.2 的粒子特效有一个严重bug。
考虑以上问题1,2,3,结合公司的现实情况,我觉得使用 cs 2.0 来重做动画成本太大,同时3.3调用cs 2.0的动画,使用也很蛋疼。我做了一个尝试,把 2dx 3.2 的 cocostudio 相关源代码覆盖到 2dx 3.3 上去,企图让 3.3 拥有 3.2 对 cs 1.6 导出资源的支持能力,至少让我载入带有粒子的动画不会崩溃。结果,各种编译不过,看着错误信息头大,遂放弃 3.3 和 3.2 混合的想法,决定把项目降到使用 3.2 版本。
颇费力气把 3.3 降到 3.2 ,改了蛮多地方,凡是使用了 3.3 特有的东西,都要改成 3.2 的实现方式。比如:UI按钮的添加单击事件处理器,在3.2是没有这方法的,只能添加触摸事件处理器。3.3 的 schedule 使用 bind 的方法,改成 3.2 的 schedule_selector 形式。等等。
终于完成了降版本工作,结果,发现游戏核心玩法的粒子特效显示有错误。3.3没问题的,怎么到了3.2有问题了呢?又是调试分析,最终发现了原因,粒子的父节点如果有旋转,并且父节点会移动,那么粒子的显示就会不正确。比如:我写了一个彗星,彗星有拖尾的粒子特效,粒子附加到彗星这个结点上,设置PositionType为Free,彗星移动会拖出一条粒子尾巴。一般情况下,这样使用不会有问题,但彗星这个对象有旋转的话,那么这个粒子尾巴就会显示错误。 -
2dx 3.3 的 UI 有一个文本文字反向的bug,但降到 3.2 后就没有了。
其实这是个小bug。在 cs 1.6 中设置一个图片为水平反向的,然后添加一个文本框上去,在设计界面上看是正常的。但用 2dx 3.3 载入后,就会发现那个文本框上面的字是反过来的。而在 3.2 中,又是正常的。
Fuck,以上这些问题,花费了我一天时间去搞。降低版本才使用得顺手,这个不对头啊,版本的进化反而埋下那么多神坑!
cs 2.0 不成熟,就让 2dx 3.3 谀桛籑容 cs 1.6 好了啊。为什么把 3.3 对 ExportJson 的载入实现代码给改了,并且引入了新的bug。
cs 2.0 不好用,但对 cs 1.6 的支持又有崩溃的问题。2dx 3.3 正式版,你这是让用户进退两难,特别是项目代码写多了后,更是有种骑虎难下的感觉。cocos2dx 3.3 真让我大失所望!!!坑爹啊!
我用的studio做动作游戏,加碰撞盒判定.