zoukankan      html  css  js  c++  java
  • 转 cocos2dx内存优化

    cocos2dx里面,sprite本身不消耗多少内存,只是关联的材质文件消耗内存。假设有10个sprite关联同一个材质,也不会有10倍消耗。


    关于图片占用的材质内存,我觉得还有好几种优化手段:
    1、对于背景图,因为不需要考虑透明问题。载入材质时可以使用 RGB565 格式(5位红色,6位绿色,5位蓝色),每一个像素消耗的内存是16bit = 2byte。比默认的 RGBA8888 消耗的内存少一半。
    2、大尺寸的图可以适当缩小,显示时拉伸放大。比如960x640的图可以缩小为768x512,消耗的内存减少一半。
    3、有些sprite不需要那么多的色彩,可以用 RGBA4444 格式载入,一个像素也只消耗2byte,减少一半。可以用 TexturePacker 这样的工具处理原始 32bitpng 图片,生成 RGBA4444 格式的材质文件。
    4、多个小图合并到一起,做成 sprite sheet,可以显著降低内存使用,性能也会好一点。
    5、超大背景图裁剪成多个小块,需要显示哪个区域才载入对应的块。程序上复杂不少,但总比内存不足崩溃掉好。

    以上优化方法,我个人实践下来效果还是很明显的。

    1。OpenGL一般都用2的N次方贴图尺寸,所以制作贴图时使它尽量接近2的N次方值,比如128*128。如果有个切片组成的贴图尺寸是130*100,那就尝试重新排布切片,使它控制在128*128以内,这样能减少一半内存。
    2。可以使用小图放大来贴,但我建议是对于背景图这样,对清晰度要求不高时,将尺寸按整数倍缩小贴图,然后贴图时采用Nearest临近差值算法,这样效果可以接受,效率又高。
    3。将切片合成贴图时,要注意将使用时机和频率相当的切片放在一起,这样可以做到当前加载进内存的贴图,都是使用频率最高的。而当前不用的贴图要及时释放掉。游戏玩家一般都可以接受等待进度条加载一些东西。
    4。游戏前期可以用模拟器测试,后期一定要真机+Instruments测试,Xcode的Instruments功能很强,可以检测Leak,OpenGL优化建议,Allocation等。
    5。游戏注意避免在logic循环或者render循环中反复分配内存,造成恶性增长。
    6。PNG要用PS针对Web压缩一下,可以缩小文件尺寸,虽然不会减少运行时内存分配,但可以减少贴图加载的IO时间

  • 相关阅读:
    python 常用的一些库
    Windows Server 2016-存储新增功能
    Windows Server 2016-Hyper-V 2016新增功能
    Windows Server 2016-Win Ser 2016已删减内容
    Windows Server 2016-Win Ser 2016新增功能
    Windows Server 2016-WinSer 2016标准版与数据中心版的区别
    Windows Server 2016-重置目录还原模式密码
    Windows Server 2016-清理残留域控信息
    Windows Server 2016-抢占FSMO角色
    Windows Server 2016-重命名域控制器
  • 原文地址:https://www.cnblogs.com/rexzhao/p/4387333.html
Copyright © 2011-2022 走看看