腾讯游戏学院 – 优化Cocos2d-x游戏性能
在Cocos2d-x中一些常用的优化方法
- 尽可能地使用批次渲染(Batch Draw)
- 按照经验,尽可能把你的 Draw 数量控制在 50 以下
- 减少 32 位未压缩纹理的使用,尽量使用 16 位且压缩过的纹理格式。纹理压缩
- 尽可能地使用支持硬件解码的压缩纹理:比如 iOS 平台使用 PVRTC 纹理, 在安卓平台上面使用 ETC格式的纹理。目前所有的 Android 设备都是支持 ETC1 格式的纹理的,但是此纹理格式不支持 Alpha,所以你需要修改一下引擎以使用 ETC1 格式的纹理。
- 不要使用系统字体来动态显示你的游戏中的分数等信息,请使用 BMFont 字体。
- 请使用对象池和预加载技术来避免临时卡顿。
- 使用 armeabi-v7a 架构来编译 Android 的 SO,因为在此架构下面 Cocos2d-x 会启用 neon 指令集,矩阵运算的效率会大大提高。
- 不要使用动态光照,尽量使用 bake 光照。
- 避免在 pixel shader 里面做非常复杂的计算 / 减少if语句
- 避免在 pixel shader 里面使用 discard 和 alpha test,因为这样会破坏 GPU 自身的 depth testing 优化,比如 PowerVR 的 HSR。
- 使用texturepacker拼图,用texturepacker把一些小散图打包到一张大图,减少纹理IO和draw call。
- 使用对象池,在需要频繁创建对象的场景中,使用对象池。
- 切换场景时释放无用纹理
CCTextureCache:sharedTextureCache():removeUnusedTextures();
CCTextureCache:sharedTextureCache():dumpCachedTextureInfo(); - 整理常驻内存UI资源,把主界面底部共用菜单等界面资源打包成一张纹理,常驻内存,省去加载和重新创建纹理的开销
- 预加载方法,对于游戏中需要用到的外部资源,比如纹理图集,声音文件和 TTF 文件等,尽量采用预先加载的方式来处理。
性能优化:
1 入场动画/分帧加载,避免一帧处理过多 <阵容出场动画>
2 资源延迟释放(popScene时, 因为释放时机不定)
3 预加载资源(即提前裁入内存, 音效/spine/…)
低端机卡顿优化(像iphone5内存512M):设置纹理格式(内存) / 不播特效… / 清楚unse纹理和spine / 删除预加载(战斗界面)
编程基础:
有重复用for循环或正则表达式 数据驱动(把数据抽象为数组或配表)
适配原则:
1 屏幕左边时锚点x设为0,位置=0。 屏幕右边时锚点设为1,位置=屏幕宽度
2 位置是相对上层/父节点,
--------------------------------------------------一些bug反馈
bug .
A 黑鲨机型剧情秀将丢失语音问题处理
B. 黑鲨手机秀将播放语音嘴型不同步问题处理
分析:不同步 是因为播放语音有延迟–预加载)
单一机型报错:一般不会针对某一机型处理/至多分类(如越南低端机高端机) 统一处理
经典的bug:
低端机战斗闪退(因为:瞬间内存过大, 如iphone5s运行内存是1GB,除去系统和应用占的 游戏能分配很少,在加载资源一瞬间过大导致crash )
武将突破闪退:重复突破时,先删除removeAllChild…又创建载入内存导致底层纹理缺失闪退
项目立项基础:(讲座)
1 UI规范
2 代码规范
3 代码通用组件 <保证技术方案统一>
4 方便的调试器
5 功能模块(数据 UI 逻辑…)
----------------------------国际化
A 文本图片处理:
B 资源规范 <带文字对应语言下,无文字放通用base目录下>
1 方便同步国服代码 2 Path路径加载