cocos2dx 终极性能优化

前端之家收集整理的这篇文章主要介绍了cocos2dx 终极性能优化前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
关于游戏的优化的文章已经非常多和详尽了,包体大小、合图压缩、音频压缩等,所有的优化都是围绕着cpu和gpu开展。
目前的硬件水平足以支持大部分非3D游戏,drawcall的场景基本上不会有超过一百的情况,2D游戏的顶点数基本上可以忽略。

一.内存优化
1.内存泄漏
在最近的项目中使用了C11的智能指针,经过一年的使用证明这是不是一个成功的选择。虽然已经没了自己管理的烦躁,但是增加了内存泄漏的几率。毕竟不是所有人都能完全理解和掌握shared_ptr的使用。 建议使用cocos2dx自带的轻量级智能指针,采用了引用计数,并且没有了C11智能指针循环引用及其他使用容易导致引用计数异常的问题。
这里有以前写的总结,处理C11智能指针的内存泄漏,关键是第四点,切忌安全使用。

2.缓存(材质缓存,精灵帧缓存)管理
这里必须要引入过渡场景,用于removeunused的缓存,然后预加载下一个场景需要使用的资源。 并且cocos2dx提供了api可以查看内存中所有的缓存,做为开发必须能完全熟知内存中的这些缓存,能及时判断哪些材质是多余的。
这里要多提的一点是,不使用jpg,android使用pkm,ios使用pvr是非常有必要的。特别对于8000*8000超大地图。

3.高性能对象池
传统对象池只有一个list保存所有对象,每次使用循环遍历查找未使用的对象。
这里的优化是新增一个队列保存所有可使用的对象。每次对象使用完进行push_front的操作,每次使用通过pop_front获取


二.cpu优化
1.近似数学函数
开方、三角函数近似替换算法,计算两点间的距离(曼哈顿距离、牛顿迭代或者使用平方数值做比较),位移运算(针对频繁的乘除2的n次幂)等。

2.算法
在算法的选择上其实渗透在我们的每一个即使非常小的功能模块,对于不是专门研究算法的我们,算法更多是一种意识。拒绝所有的时间复杂度O(n*n)的操作,永不高估cpu的计算性能,在现有的操作上力求更低的计算量。 然后有的放矢的去选择适合自己项目的算法。

3.分帧
分帧是比较坏的情况,因为这时候优化可能到了末尾。确实有一些cpu密集型的计算需要分帧甚至开线程来解决了。
PS:空间换时间。其实上面三条包括我的高性能的高斯模糊算法那篇文章,基本上对于cpu的优化核心都是空间换时间。


三.GPU优化(Drawcall优化)
1.超大图的切片
切片太小对于drawcall是非常有影响的,目前使用最大化切片2048*2048,并且图片使用压缩格式使用存在于缓存中。

2.合图(多摄像机场景)
对于摄像机比较多的场景,由于底层是遍历摄像机,每个摄像机执行一次场景的全部绘制。
所以在合图的时候需要按照摄像机来分层合图,不要把不同摄像机的图片合到一起。
做为开发要能够根据看到的场景预估drawcall数量,在判断出异常的时候分步优化层级drawcall数量

3.粒子特效的选择。
切忌使用pu

4.通用艺术字图集代替默认字体。

补充:
四.3D模型的优化
顶点数即面数,要限制。
模型材质大小限制。
动作帧数限制。
模型动画预创建。

猜你在找的Cocos2d-x相关文章