分享总结一些新手优化心得和碰到的坑:
版本:v2.0.10-alpha.4
1. 大量重复创建的节点一定要使用节点池
游戏初期开发完后,发现真机比较卡顿,当时比较偷懒,仅给子弹和敌机使用了节点池。后来发现敌人爆炸的时候,以及子弹撞击的时候(我们的爆炸和撞击特效是new 一个包含复合粒子的prefab ),会大量掉帧,后来给所有爆炸效果,以及子弹爆炸,等粒子特效节点也使用了组件池,性能得到了大幅度提升。
2. 微信小游戏中粒子数量不要太大,最好控制在100以内
感觉目前微信小游戏,粒子特效还是要省着点用,比如一些软件生成的默认粒子数,都需要注意下调整他们的粒子数量。不过一般降低粒子数量后,效果会差别很大,这时候可以增大粒子大小,来一定程度上的弥补视觉上的欠缺。
3. 微信小游戏音效卡顿优化
在微信小游戏里,频繁的 play 音效,会造成一定卡顿。比如当子弹撞击到敌人的时候,或者金币拾起的时候。
这个时候可以将短时间重复播放的音效合成一个,来循环播放,或者直接单音循环播放也可以起到优化的效果。在碰撞或者动画结束的时候,暂停(pause)音效播放即可,下次只要resume 就好。
总之就是避免频繁的 执行 play。
4. 小游戏里尽量不要直接使用scrollview
如果要用的话,一定要做优化,这一块我也偷懒了,仅使用了将超出显示的节点 opacity 设成0,来稍微降低些 drawcall。最好的方式应该是循环复用暂不显示的节点。个人觉得最简单的方式其实就是不要用scrollview,直接使用翻页的方式替代。
5. 微信子域排行榜scrollview 无法滚动问题
这个问题当时也困扰了很久,这里面可能有两个坑:
-
子域里layout 是无法自动计算高度的,需要我们手动通过计算节点的高度,spacingY,top,bottom和在一起,计算出高度。
-
和 DPR 有关,当时发现模拟器上 iphone 6可以,但是iphone x 不可以,解决方法是修改
子域文件夹下的libs 里面的 sub-context-adapter.js 这个文件cc.view.convertToLocationInView = function (tx, ty, relatedPos, out) {
…
result.x = x / (this._devicePixelRatio / 2);
result.y = y / (this._devicePixelRatio / 2);return result;
}
大概总结了以上几点,之后有碰到再补充些。