Cocos studio 2d骨骼动画 卡顿

环境:
cocos2d-x 3.8.1 c++
cocos studio 2.3.3.0
测试机:三星s4以及其他两台性能差不多的国产机

添加了30个怪和1个人物,只有40帧左右

想请教各位论坛大神有没有什么优化措施?

动画用的2d骨骼动画

用的这种方式创建的怪:
Node* image = CSLoader::createNode(“zombie01.csb”);
ActionTimeline* _action = CSLoader::createTimeline(“zombie01.csb”);

游戏启动时建好30只,根据时间移动进屏幕,移动到位置后切换到攻击动作

有没有大神能给点优化思路啊~~~~~~

大神何在啊~~~~~~~

趁早脱坑吧

暂时脱不了啊。。。
真没什么办法的话,只能让策划想办法少刷点怪了

你的calls数量不对啊
你的骨骼动画没有用plist整图吧

两种怪物,一个人物,全都整合到plist里了,人物上有武器特效,用了两个plist
文件总计:
.png * 4
.plist * 4
.csb * 3

用的1280 * 720的分辨率
每个object的大小约为100 * 100

我也很奇怪,为什么calls那么多
按道理,同一个纹理不应该只call一次的么- -

顺带提一下,用到了scheduleUpdate(),平均用时不到1ms
里面的操作:
1.每个怪物,根据dt和speed进行setPosition移动(没用action做移动)
2.根据y轴setLocalZOrder,给怪物进行叠放顺序的排序
3.检测怪物走出边界,删除

如果你每个单位用了两个以上不同的plist的话 那么就会中断批量渲染
主角做复杂点没关系, 怪物就只用一个plist吧,就算是40个怪也只会增加两次calls,因为zorder的关系,应该是先批量渲染几十只怪,然后渲染一次主角,然后在批量渲染剩下的怪

经过测试,calls多,其中一个原因确实是两种怪用的两个plist,且zOrder根据y进行了排序的原因

另外,发现个很神奇的现象
1.单独add两个怪,calls是2
2.单独add一个UI,calls是14
3.add两个怪和一个UI,calls是18

这个18,是2 * 2 + 14得来的
测试2:两个怪加两个UI是48,是(2 * 3) + (14 * 2) + 14
测试3:两个怪加三个UI是92,是(2 * 4) + (14 * 3) + (14 * 2) + 14
之前的135 calls,是加了两个UI,直接乘3乘出来的- -
不知道是不是这种算法,反正很迷。。

骨骼动画消耗性能比较大

意思是,改成帧动画,性能会好些?

不知道能提升多少啊。。
百度也搜不到相关的性能对比,美术去弄帧动画又要多花一堆时间,好蛋疼啊

你简单的测试下就会发现序列帧和骨骼动画的差距了
一般来说怪物的动作都比较简单,而且同屏数量比较多,用序列帧会好些
当然你要是同屏怪物数量少,就用骨骼动画也可以
如果你骨骼动画用的是spine做的,那可以直接导出序列帧图片
如果你是用cocos做的,那可能稍微麻烦点
这些还是自己动手测试比较一下心里才有个谱,而且这个测试又不麻烦
前期各种测试,准备做充分了总比你后面改好吧

原来spine还能导出帧序列动画的啊
公司之前没人碰过这玩意,还真不知道,准备学习spine了

感谢各位的指导~

spine不能直接导出帧序列动画
是spine有很多种导出格式
你可以先用spine做骨骼动画, 然后导出N涨序列帧图片
然后再用cocos去做成序列帧动画

性能对比:

图片资源大小:
骨骼动画(未压缩)20K
帧动画(已压缩)225K

综上对比,这个项目采用spine骨骼动画比较好~

全部用帧动画图片资源占用比较大,你需要考虑怪物种类多不多,安装包会比骨骼动画大很多

除了骨骼动画,还有补间动画,序列帧动画,所谓的骨骼动画,是实时计算帧 之间的插值,支持反向动力学。一般的游戏用补间动画就行了