IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> cocos2d-xcocosCreate 内存优化 -> 正文阅读

[游戏开发]cocos2d-xcocosCreate 内存优化

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. 微信小游戏(允许分离引擎)
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 08:09:12  更:2021-07-28 08:11:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 16:27:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码