环境:
cocos2d-x 3.8.1 c++
cocos studio 2.3.3.0
测试机:三星s4以及其他两台性能差不多的国产机
添加了30个怪和1个人物,只有40帧左右
想请教各位论坛大神有没有什么优化措施?
环境:
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去做成序列帧动画
全部用帧动画图片资源占用比较大,你需要考虑怪物种类多不多,安装包会比骨骼动画大很多
除了骨骼动画,还有补间动画,序列帧动画,所谓的骨骼动画,是实时计算帧 之间的插值,支持反向动力学。一般的游戏用补间动画就行了