本文主要是介绍cocos2d-x,cocosCreate 内存优化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
cocos2d-x
内存
一、 合图 (推荐使用TexturePackerGUI)
- 能够节省内存(移除透明区域,留下有像素的块)
- 在合图工具里图片格式改为4444+图像抖动 , Allow Free Size
二 、图片格式
- png : 一般用于安卓平台,但会有短暂的内存暴增2倍情况(因为png是一种无损压缩算法的位图格式)
- pvr : 一般用于苹果平台,无法在windows上浏览,在游戏中才看的到,苹果系列的显卡对pvr有天然的硬件加持
- pvr.czz : pvr 的压缩格式减少包体大小,但占用运行内存和pvr一样大。
- jpg : 不支持透明通道,游戏内会先转为png(内存暴增3倍)
- 图片大小计算:一个字节 = 8 位, 1kb = 1024 字节
(一张1024 * 1024 )的RGBA 8888 的图片占用内存大小(每个像素占8位)
1024 * 1024 * 4 字节 = 4 M
三 、加载图片资源
- 不要在同一帧内加载所有资源,最好逐帧加载(防止内存暴增,超出峰值)
- 先加载大图片再加载小图片(放置内存占用溢出)
- 对图片进行分类,释放不需要的内存
资源释放顺序:
(原因是ccocos2d的回收机制只会释放掉引用计数为0的资源)
(注意:remove是用来将引用计数减一)
4. animationCache:getInstance->destoryInstance();
5. spriteFrameCache:getInstance->removeUnusedSpriteFrame()
6. TextureCache:getInstance->removeUnusedTexture();
- 场景释放的时机
四、TinyPng(在线压缩工具)
不能减少内存,但可以减少包体占用
五、粒子系统
(使用粒子系统代替序列动画)适当使用(适当使用粒子系统:省内存耗CPU,适当减少粒子数)
六、骨骼动画
省内存耗CPU,对美术的要求比较高 骨骼动画制作工具:spine,Dragon(龙骨)
七、九宫格
图片放大时,切成九宫格,中间放大,上下横拉伸,左右纵拉伸,边角不变。放大时边线就不会出现锯齿状。
八、内存池
一个内存池管理所有的内存,防止频繁的向系统申请内存。提升程序性能。
九、对象池
当一个对象需要频繁创建的时候,就可以用对象池(可以避免出现碎片化内存,垃圾内存)。当对象不需要使用时将其自身隐藏并放入对象池,当需要时,显示自身并重新初始化。
十、代码层面
该释放的内存要释放,防止内存泄漏(Windows内存泄漏检测工具VLD),算法层面上进行优化。
十一、音频:使用适当的工具进行处理
免费音频工具http://audacity.sourceforge.net/
- 立体声道变单声道——MP3文件可以采用立体声,如果你听不出来差别的话,建议还是采用单声道,这样大小和内存使用都减少一半。
- MP3 比特率,96到128kbps对于MP3文件来说够用了。
- 采样率——大部分声音文件使用11,22,44,或者48kHz采样率。采样率越低,声音文件越小。但是,这样声音的质量也会越低。44kHz已经达到了CD的音质了,而48kHz会更高(这个差别只有调音师才可以听得出来)
- 在大部分的情况下,44kHz或者更高的比特率都有点浪费。所以,可以尝试下减小采样率(在Audacity里面:Tarck->Resample)。不要只是修改采样率,因为这样会改变声音文件的音高。
CPU
一、降低drawCall
尽量多的图片合成一个批次(CPU向GPU提交一次渲染请求就是一次drawCall)
二、尽量多的批处理
批处理条件:
- 合批的图片必须是在同一张纹理里(即一个合图里)
- 合批的节点在渲染顺序上相邻(同一个父节点下)
- 改变渲染状态会打断合批状态例如(预乘,循环模式和过滤模式)或者改变材质(material),混合模式(blend)等
三、防止批处理被打断
(draw call 被打断:abcdef中C不在同一纹理,需要draw call 3次)将同一纹理放在一起,防止被打断。
四、字体
少用系统字体,一个字一个draw call 一般使用bmfont,如果是系统字体尽量减少刷新次数。
五、物理引擎
少用物理引擎
cocosCreate
- 合理拆分prefabs
- 合理使用预制体加载场景,分批异步加载
- 资源使用延迟加载
- 引擎模块裁剪
- 减少setting 文件大小,需要代码加载的才放在resources,否则不要放在resouces里
- 减少http请求次数,(因为一般cocoscreate做的都是小游戏,游戏资源放在服务器,所以要减少请求次数,比如将小图合成合图)
- 减少mask组件的使用,该组件会导致游戏中的Drawcall数量变多
- release(调试模式)
- 微信小游戏(允许分离引擎)
这篇关于cocos2d-x,cocosCreate 内存优化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!