关于cocos游戏内存优化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于cocos游戏内存优化相关的知识,希望对你有一定的参考价值。

参考技术A 一、cocos2dx游戏内存优化
在游戏里面,游戏的内存占用绝大部分是纹理,所以我们要优化的对象主要是纹理方面。
(1)分帧加载纹理或者item,优化图集,打包碎图到大图。
什么是分帧加载?分帧加载就是加载下一个纹理的时候至少相隔一个帧的时间,不能同一帧时间里面加载多个纹理,如果一次加载太多东西,会导致页面卡顿现象。分帧加载主要用在页面加载另一个场景资源的时候,和像背包那种srcollview 很多物品的时候。
(2)使用对象池,如果使用大量相同精灵纹理。
(3) 按照最大到最小的顺序的加载纹理,可以减少内存瞬间的峰值。 创建精灵CCSprite的过程中会创建一个CCImage,所以短时间会占用2倍内存,所以应避免连续加载(同一帧内,加载多张图片)。
(4)避开内存使用高峰
(5)当不需要的时候释放无用的资源
(6)减少声音文件大小
(7)使用Loading层作为缓冲,清除前面没用的缓存完了加载新的场景。
(8)使用骨骼动画代替序列帧动画

二、creator 游戏内存优化,主要从这几个方面去优化:加载优化、渲染优化、内存优化、CPU占用以及性能优化
1、图集打包
(1)省去了多次打开/关闭文件所带来的时间损耗,减少图片读取和解码操作。
(2)减少文件的体积
(3)多张图片合并到一起,在包体上面会有一定的优化,减少DrawCall
2、优化资源释放,场景切换,用不到的资源释放掉。
3、Prefab加载优化
Prefab这块的加载优化主要集中在两个地方:一个是load加载耗时优化,另一个是实例化耗时优化。
超大的prefab可以考虑拆分不同的基本功能来实现
4、资源批量加载优化,也就是分帧加载
如果需要大量生成节点或者prefab的时候,我们要考虑分帧加载,不能一次性的同一时间加载
5、游戏中频繁更新的文字,推荐使用BMFont,系统字体会比较消耗性能。
6、渲染顺序调整,属于同一合集的纹理节点尽量一起渲染,中间尽量不要参杂其他纹理
7、优化节点树,减少节点数量
8、场景中不要挂载过多的Prefab,可适当将一些Prefab变成动态加载的
9、减少声音文件大小
10、使用骨骼动画代替序列帧动画

cocos2d-x 游戏优化方案

优化的方案:

        引擎底层优化、纹理优化、渲染优化、资源缓存、内存优化.

纹理优化:

cocos2d-x 底层是OPenGL ES实现的。 对于图案片载入的内存是2的幂次方。

使用的图片是100*128 会被转为128*128。

如此浪费一定的空间。

色深优化:png图片: A8R8G8B8 A1R5G5B5 ARGB4444  有透明效果;jpg图片:RGB888 RGB555    无透明效果。

不影响图片效果的前提下能够使用较低的色深使用。

纹理压缩格式:ios设备使用的是powervr现实芯片,pvr格式能够被现实芯片直接读取。有硬件设置解码支持。可是不适用与android设备。powervr使用的也是A1R5G5B5

骨骼动画:使用骨骼动画编辑器进行对应的动画编辑,优化内存。使用cocosbuilder。

解决方法:使用拼图的方式。拼图工具如TexturePacker。会生成.plst文件。载入.plist文件之后使用纹理坐标取图片。

渲染优化:

使用CCSpriteBatchNode。纹理切换导致效率降低,使用拼图方案。

不用切换纹理。降低渲染次数。

资源缓存:

使用资源之载入资源进行缓存。

使用CCSpriteFrameCahe  CCTextureCache 。降低载入资源次数。对于不适用的缓存资源要即使release.

内存优化:使用内存池。



以上是关于关于cocos游戏内存优化的主要内容,如果未能解决你的问题,请参考以下文章

iOS和android游戏纹理优化和内存优化(cocos2d-x)

如何优化cocos2d程序的内存使用和程序大小

cocos2d-x 游戏优化方案

如何优化cocos2d程序的内存使用和程序大小

cocos2dx内存优化

cocos2d-x如何优化内存的应用