我也是没用Creator多久以下都是个人总结,欢迎补充和拍砖
我优化游戏大概有以下几个方面:
1.减少资源内存占用
2.减少计算
3.降低draw call
4.使用对象池
5.动态调整游戏帧率
一.内存中的资源占用:
1.使用适当的设计分辨率不要将设计分辨率定的太大 1136 x 640 足矣
2.不使用的资源及时释放
二.减少计算量
这个只能根据游戏来处理了,减少一些不必要的运算,使用更好的算法,一般的小游戏计算量其实都还好
三.降低draw call
1.将小图合成大图使用打图集的工具
2.Label使用BMFont
3.减少Mask使用
4.不要使用jpg图片
5.减少粒子使用
有些人可能会说明明这些都做了为什么Draw Call还那么高?
1.不同图集之间渲染被打断
合并draw call就是同一张图片渲染中间不能出现不同的纹理,如果一个场景中只有一张大图,场景中只有Sprite,那么draw call 肯定为1 (如果是使用自动图集的必须要发布出来才能生效),如果场景中有两张大图,只有相同大图的node一起渲染,才不会打断draw call , 当图集A的所有Sprite 都在node 1 ,图集B的所有Sprite都在 node2就会只有两个 draw call,或者图集A的所有 Sprite 都在图集B所有 Sprite 的之前渲染也会只有两个draw call 。如果不同大图之间的Sprite对象交叉在一起渲染draw call就会变高。
2.相同层级中间穿插Label
如果多个Label使用的相同BMFont 字体并且在同一个node ,label与label之间没有其他的node,label的draw call也会合并,如果sprite之后有一个label,label之后又有一个sprite,这样两个sprite就不能合并draw call,label尽可能在sprite之后渲染或者放到单独的Node上。
3.使用Mask组件会打断draw call
四.使用对象池减少游戏过程中动态创建对象
游戏中多次出现的东西有加入对象池,比如一些游戏中出现的效果,游戏中的道具,游戏中浮现的加减分数,有必要就不用label,自己封装个对象,将0-9出成图片,打入大图中。
五.动态修改游戏帧率
我以前从来没有修改过游戏帧率,怕影响游戏效果,但是打出APP包,在一些手机上发热特别严重,玩一小会就感觉可以当暖手宝用,现在做的是一个休闲的小游戏,感觉对帧率要求不是很高,就把游戏中不显示动画的时候帧率设为45帧,有动画的时候把帧率设为60帧,使用的接口就是cc.game.setFrameRate();
六.动态移除游戏中的部分效果
我在游戏过程中启动了一个update,将游戏卡顿划分等级,我这边是,当连续6帧内,帧率低于50帧为一级卡顿,连续低于45帧为二级卡顿,我这个游戏背景上有很多的特效,将可以移除的特效放到数组中,检测到当前是几级卡顿就停掉对象的效果,还有就是如果有些效果可以用图片代替也可以在较为卡顿的时候给替换为图片,如果有些重动态修改了帧率,不要忘了将设置的卡顿帧率乘以缩小的系数。
我这边用三星Note3 测试时H5 版本展示动画时 draw call上升了 100 多也不会出现卡顿,native就会有明显的卡顿效果。
我们这边是要出H5版本和APP版本,相同的手机h5版本总是比APP版本性能优秀,希望引擎组各位大大native方面也能优化到H5那么优秀。