cocos2dx内存优化

编程入门 行业动态 更新时间:2024-10-25 00:25:13

cocos2dx<a href=https://www.elefans.com/category/jswz/34/1753720.html style=内存优化"/>

cocos2dx内存优化

在这里总结一下我这一周以来所了解的和纠结了很长时间的cocos2dx图片素材的优化(基于结果,做了很多测试后的分析,底层的东西我也不是很懂),我所使用的版本是3.6:

非常具有启发意义的一篇文章,来自外国的大神,下面先供上链接以及

中文翻译链接:/,

翻译:.html


一、图片格式

 ***游戏中一律采用.pvrz格式的打包。***.pvrz格式是cocos2dx引擎直接认可的格式,加载时相比.png格式用时少、加载时消耗内存也少(png图片加载时需要消耗两倍的内存,这是由于cocos2dx的内存管理所导致的,具体原因可以自己上网查询。)。我们大多数图片采用RGBA4444的图片。相比RGBA8888的图片,内存能节省一半,但是同时也会导致图片失真,这里我们用TexturePacker中的抖动算法可以进行改善,但是仍然会有一些图片会失真(比如炼丹炉中的炉子),所以需要人工辨认,将这些图片用RGBA8888的格式重新打包。我们打包时采用NPOT格式的图片,NPOT:不是2的幂。这样可以节省图片空间,占用内存少。当前OpenGL版本是支持NPOT的。

二、图片打包

***打包软件:TexturePacker(必须用破解版或者正版,试用版不行),最好支持正版!!***
步骤:①导入图片②选择格式.pvrz③选择颜色通道RGBA4444④选择抖动算法FloydSteinbergAlpha⑤采用NPOT格式,选择AnySize
注意:图片如果太大,比如4000*4000,要分开来压缩!原因两点:1、图片太大,有些设备不支持2、经测试,将大图分开来,可以减少内存消耗一般来说1000*1000以下最好,1000-2000之间可接受

三、代码设置

***代码中不需要做出额外设置,下面具体分析可以不看。***不要看有些教程中说要设置成:RGBA4444。我们仍然保持引擎的默认设置RGAB8888,因为非常妙的一点就是引擎并不支持将RGBA4444转化为GRBA8888,所以说它并不会将我们的16位图片转化为32位,它仍然会按照4444的格式来使用!而且我们有些图片用RGBA4444格式会失真,这样我们仍可使用8888的图片。当我们使用默认设置加载RGBA4444格式时,在异步加载的时候会看到这样的提示:“unsupport convert for format 8 to format 2”,不用去管!
相反的,如果设置成RGBA4444,引擎是支持将RGBA8888图片转化为4444的,这样我们使用8888的图片就会失真了。

设置代码:Texture2D::setDefaultAlphaPixelFormat(Texture2D::PixelFormat::RGBA8888);

四、图片资源的加载与释放

***我认为当所有资源小于70M时,可以全部进行预加载。***在游戏中我将一些立刻要显示的图片提前进行了加载,而一些对话框的资源只有当用的时候才进行加载。每次退出场景,在onExit调用removeSpriteFramFormFile方法,制定释放我认为需要释放的资源。每次进入新的场景,在onEnter函数处调用removeUnusedTextures()。对于那些对话框,在init方法处预加载资源,onExit方法释放。

五、其他的事

   加载资源的时候越懒越好,不到显示出来的时候不加载,当然这需要个人权衡,图片资源太大的话还是先加载吧。使用png资源时,尽量不要在一个函数内加载所有的资源,逐帧加载最好。这是因为cocos2dx采用的内存管理方式,导致加载png资源会占用两倍的内存。有博客说,按资源从大到小的方式加载也有助于节省内存。

更多推荐

cocos2dx内存优化

本文发布于:2024-03-15 03:48:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1738041.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:内存优化   cocos2dx

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!