zoukankan      html  css  js  c++  java
  • cocos2d-x3.2中怎样优化Cocos2d-X游戏的内存

        在游戏项目优化中都会碰到一个问题,怎样既能降低内存又能尽量降低包的大小?在实际项目中有些经验分享一下,其实2D游戏中最占内存的就是图片资源,一张图片使用不同的纹理格式带来的性能差异巨大。下表是我在IOS平台一个小Demo中的測试结果,该Demo的原始内存占用是7M,測试方法是一次性载入5张2048*2048的图片,使用TexturePacker工具生成图片,内存统计使用Instrument工具,载入时间统计用-X引擎提供的CCTime类,单位是微秒。

    图片格式               载入时间   内存占用 备注
    png                         782080     88M         5张 2048*2048 的PNG
    pvr.ccz(POT)      394769       102M        5张 2048*2048 的pvr.ccz(POT:2的整次方)
    pvr.ccz(NPOT)   338099      85M          5张 2047*1680 的pvr.ccz(NPOT:非2的整次方。即图的实际大小)
    pvr(PVRTC4)     8875            33M          5张 2048*2048 的pvr(PVRTC4:压缩比率为8:1的有损压缩。实际測试发现画质基本没有损失)

    结论:
    1)比較载入速度:原始PNG是最慢的,使用POT的pvr.ccz大约是原始PNG的50%,使用NPOT的pvr.ccz大约是原始PNG的43%,使用pvr则仅仅要原始PNG的1%;
    2)比較内存占用:使用POT的pvr.ccz大约是原始PNG的1.2倍,使用NPOT的pvr.ccz和原始PNG差点儿相同,使用pvr仅仅要原始PNG的40%;

    从中能够看到,对于尺寸大的图片,选择纹理格式时。最优先使用的是PVR,其次是NPOT的pvr.ccz。考虑到多平台支持。综合起来,对图片资源的管理方案能够例如以下(下面所说图片尺寸以iPad高清为标准):
    1)对于1024*1024及下面的小图片,还是使用PNG,由于简单,全部平台都能用。
    2)对于1024*1024以上的图片,首选用pvr,它能直接加载到IOS设备的显存里,无需经过内存解析。所以快;可是,遗憾1:安卓设备不支持;遗憾2:TP工具不支持生成2048*2048以上的pvr;
    3)如2所述。对于2048*2048以上的图片。及安卓设备,则使用NPOT的pvr.ccz,在Cocos2d-x 2.x引擎里默认已经支持,全部3代(iphone 3GS)以后的ios设置都支持cocos2d 2.x(由于它们支持OpenGL ES2.0)。所以也都能支持NPOT纹理;
    4)经过測试,安卓设备也支持NPOT。所以方案比較简单。1024*1024及下面的用PNG。1024*1024以上的使用NPOT选项的pvr.ccz。

    採用以上方案后,游戏所占内存从90多M降到了60多M,在IOS各种设备跑过了,touch3、touch4、iPad1等低端设备都没问题。

    本人cocos2dx 2.x和3.x的源代码淘宝地址(欢迎大家光顾):https://shop141567464.taobao.com/?spm=a313o.7775905.1998679131.d0011.pzUIU4


    不懂的能够加我的QQ群: 239982941(cocos2d-x 3.x学习群)欢迎你的到来哦。看了博文给点脚印呗,谢谢啦~~

  • 相关阅读:
    bootstrap table 怎么自适应宽度
    nginx解决超长请求串(413 request Entity too Large错误解决办法)
    nginx proxy_buffer_size 解决后端服务传输数据过多,其实是header过大的问题
    测试了下boost的序列化反序列化功能
    测试C++代码与WebBrowser HTML的互动
    Open SSL 开发环境配置
    modern-cpp-features
    Qt程序调试之Q_ASSERT断言(条件为真则跳过,否则直接异常+崩溃)
    分布式事务
    Django admin
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5231560.html
Copyright © 2011-2022 走看看