当前位置: 首页 > 工具软件 > cocos2d > 使用案例 >

cocos2d-x,cocosCreate 内存优化

颛孙麻雀
2023-12-01

cocos2d-x

内存

一、 合图 (推荐使用TexturePackerGUI)

  1. 能够节省内存(移除透明区域,留下有像素的块)
  2. 在合图工具里图片格式改为4444+图像抖动 , Allow Free Size

二 、图片格式

  1. png : 一般用于安卓平台,但会有短暂的内存暴增2倍情况(因为png是一种无损压缩算法的位图格式)
  2. pvr : 一般用于苹果平台,无法在windows上浏览,在游戏中才看的到,苹果系列的显卡对pvr有天然的硬件加持
  3. pvr.czz : pvr 的压缩格式减少包体大小,但占用运行内存和pvr一样大。
  4. jpg : 不支持透明通道,游戏内会先转为png(内存暴增3倍)
  5. 图片大小计算:一个字节 = 8 位, 1kb = 1024 字节
    (一张1024 * 1024 )的RGBA 8888 的图片占用内存大小(每个像素占8位)
    1024 * 1024 * 4 字节 = 4 M

三 、加载图片资源

  1. 不要在同一帧内加载所有资源,最好逐帧加载(防止内存暴增,超出峰值)
  2. 先加载大图片再加载小图片(放置内存占用溢出)
  3. 对图片进行分类,释放不需要的内存
    资源释放顺序:
    (原因是ccocos2d的回收机制只会释放掉引用计数为0的资源)
    (注意:remove是用来将引用计数减一)
4. animationCache:getInstance->destoryInstance();
5. spriteFrameCache:getInstance->removeUnusedSpriteFrame()
6. TextureCache:getInstance->removeUnusedTexture();
  1. 场景释放的时机

四、TinyPng(在线压缩工具)
不能减少内存,但可以减少包体占用

五、粒子系统
(使用粒子系统代替序列动画)适当使用(适当使用粒子系统:省内存耗CPU,适当减少粒子数)

六、骨骼动画
省内存耗CPU,对美术的要求比较高 骨骼动画制作工具:spine,Dragon(龙骨)

七、九宫格
图片放大时,切成九宫格,中间放大,上下横拉伸,左右纵拉伸,边角不变。放大时边线就不会出现锯齿状。

八、内存池
一个内存池管理所有的内存,防止频繁的向系统申请内存。提升程序性能。

九、对象池
当一个对象需要频繁创建的时候,就可以用对象池(可以避免出现碎片化内存,垃圾内存)。当对象不需要使用时将其自身隐藏并放入对象池,当需要时,显示自身并重新初始化。

十、代码层面
该释放的内存要释放,防止内存泄漏(Windows内存泄漏检测工具VLD),算法层面上进行优化。

十一、音频:使用适当的工具进行处理
免费音频工具http://audacity.sourceforge.net/

  1. 立体声道变单声道——MP3文件可以采用立体声,如果你听不出来差别的话,建议还是采用单声道,这样大小和内存使用都减少一半。
  2. MP3 比特率,96到128kbps对于MP3文件来说够用了。
  3. 采样率——大部分声音文件使用11,22,44,或者48kHz采样率。采样率越低,声音文件越小。但是,这样声音的质量也会越低。44kHz已经达到了CD的音质了,而48kHz会更高(这个差别只有调音师才可以听得出来)
  4. 在大部分的情况下,44kHz或者更高的比特率都有点浪费。所以,可以尝试下减小采样率(在Audacity里面:Tarck->Resample)。不要只是修改采样率,因为这样会改变声音文件的音高。

CPU

一、降低drawCall
尽量多的图片合成一个批次(CPU向GPU提交一次渲染请求就是一次drawCall)

二、尽量多的批处理
批处理条件:

  1. 合批的图片必须是在同一张纹理里(即一个合图里)
  2. 合批的节点在渲染顺序上相邻(同一个父节点下)
  3. 改变渲染状态会打断合批状态例如(预乘,循环模式和过滤模式)或者改变材质(material),混合模式(blend)等

三、防止批处理被打断
(draw call 被打断:abcdef中C不在同一纹理,需要draw call 3次)将同一纹理放在一起,防止被打断。

四、字体
少用系统字体,一个字一个draw call 一般使用bmfont,如果是系统字体尽量减少刷新次数。

五、物理引擎
少用物理引擎

cocosCreate

  1. 合理拆分prefabs
  2. 合理使用预制体加载场景,分批异步加载
  3. 资源使用延迟加载
  4. 引擎模块裁剪
  5. 减少setting 文件大小,需要代码加载的才放在resources,否则不要放在resouces里
  6. 减少http请求次数,(因为一般cocoscreate做的都是小游戏,游戏资源放在服务器,所以要减少请求次数,比如将小图合成合图)
  7. 减少mask组件的使用,该组件会导致游戏中的Drawcall数量变多
  8. release(调试模式)
  9. 微信小游戏(允许分离引擎)
 类似资料: