【手游开发优化篇】cocos2d-x内存管理优化(内存是游戏的硬伤)

2014年05月24日更新

以前的关注点都是 怎么用 根本没有往深层次追踪过。为什么这么用。今天记录下:

如果我们用的是pvr.ccz的图片 加载到内存中是根据你到处是的像素格式来渲染到ui中。如到处是你用16位则加载到内存中他还是16位。占用的内存比较少。

如果你用32位 则内存中也是32位 内存是16位的2倍;

但是如果你用的是png jpg则不是上面的方式 。。不管你用什么格式 加载到内存中都是32位占的内存是最大的。除非你设置

Texture2D::setDefaultAlphaPixelFormat(Texture2D::PixelFormat::RGBA4444);

用完之后记得设置为默认模式

Texture2D::setDefaultAlphaPixelFormat(Texture2D::PixelFormat::DEFAULT);

IOS与图片内存

在IOS上,图片会被自动缩放到2的N次方大小。比如一张1024*1025的图片,占用的内存与一张1024*2048的图片是一致的。图片占用内存大小的计算的公式是;长*宽*4。这样一张512*512 占用的内存就是 512*512*4 = 1M。其他尺寸以此类推。(ps:IOS上支持的最大尺寸为2048*2048  ios 8 看了下 支持4096*4096)。

 

今天就说一下反馈的评论  有人说 图和标题怎么不一样   我解释下  最近我在弄点击图片放大图片的功能 所以为了测试我就随便加个图。测试用。。。

接着上次写的 。。。

在写之前 我想了一下 我要写的内容 和网上的内容一样。还有必要写吗,仔细想想 还是写比较好。。写下来 也算是自己了解过一次。虽然一样,但是记录下来闲暇的时候可以回顾一下。

 

言归正传 。我现在在开发一款手机游戏 梦幻寻仙,已经封测了两次了 。。都会出现各种问题。玩家反馈最多的就是 玩着玩着就崩了,这款游戏的内存在游戏页面也就是主页面  最大的时候竟然达到了400M的内存。。这是很高的内存了。。。玩不过一小时 必崩。。这种情况在项目开发之初就存在很大的问题。。所有的动画都是帧动画。。如玩家  橘色  坐骑  npc 怪 可以用骨骼动画,还有特效 也是帧动画,这个没办法 有些特效是可以用粒子特效。但是也有很多事没办法用粒子特效的。再就是背景音乐  大小是1.5M。太大了 比特率 和样本率都很高 只用音乐大师才能听得出差别来 对于我们这种屌丝玩家   无关紧要。。重要的是游戏别动不动就死。。。这是关键。

音乐 一般有三个因素影响文件内存使用。是音频文件格式,比特率,和样本率。

我们最希望音频文件时mp3格式。因为它被android和ios都支持。

并且它也被压缩并且硬件加速了。你应该保证你的背景音乐文件大小在800KB一下。

最简单的方式就是减少背景音乐播放时间并且重复调用。你应该保持你的音频文件样本率在96-128kbps之间,并且比特率在44kHz就足够了。

粒子系统  我们可以减少粒子数量 来减少内存。

让我们看一下纹理优化
为了优化纹理内存的使用,我们必须知道什么因素影响了内存的使用情况。
有三个因素影响了纹理的内存使用。纹理格式(压缩的还是非压缩的),颜色,大小。
我们可以使用PVR格式的纹理来减少内存使用。最被建议的纹理格式是pvr.ccz,每色的bit值越高,画面质量就约好。但是也会消费很多内存。
那么我们使用颜色深度是RGBA4444的纹理来代替RBGA8888,这将会消费一半内存。
我们也会发现大纹理也会导致内存相关的问题。那么你最好使用适度的大小。

 

程序包的【体积】优化方法:

首先 你需要很清楚当前自己项目什么地方占的体积最多,例如动画序列多少MB、地图占多少MB等等,都要提前做一个Check! 别总是认为哪里哪里可能占的多,要详细的知道才行!

1. 采用工具对资源进行[打包],例如TexturePacker 等工具。

2. 采用png压缩工具等,在打包图片前对每张图片进行[压缩]!

如果以上两点都做了还是体积过大,那么继续采取如下办法:

3. [降低图片质量],比如你项目使用的图片是24bit,那么你可以采用低一些的,例如8bit的图片质量类似。 (ps.别说这样会让图片失真,先试试降低到什么程度的bit最合适再说)

4. 使用特定的压缩格式的图片,例如[wdp] 等等

5. 如果项目中帧序列动画占的比较多,那么可以采取[降帧]的方式来优化。

6. [缩放] 图片!举例,假设你项目用了10张500*500规格的图片,那么你可以让美术把这种图片缩放70%~80%,然后用这种缩放过的图片进行程序放大。(这种方式的图片质量是否会看起来失真,完全取决于缩小的倍数决定,可以适当调整缩放倍数,但是此方法绝对可行!)

7.如果以上方式都优化过,那么可以采取 [换思路]方式,假设你的地图是一张500*500的大图作为背景地图,那么你要考虑是否可以采用地图编辑器来进行拼接的方式来进行!

8. 采用[编辑器],可以利用地图编辑器、动作编辑器、骨骼编辑器等从而减少资源的使用从而达到减少体积,降低内存的使用。

9. 如果以上方式还都无法让你的项目包体积降低,那么你只能采用[在线更新下载]了,将程序包分为两部分,一部分是启动游戏所需的必要资源,另外一部分是游戏启动非涉及到的资源,将启动不会使用的资源放在服务器端,通过在线更新方式,从服务器将其他资源下载到客户端即可。

10. 再如果以上方式都采用后还是体积偏大,宝贝,你只能来个[阉割版]了,常命名为[xxx Lite]

程序【运行内存】的体积优化方法:

其实降低程序包体积的方法很多都同时降低了程序的运行内存,例如:

1. [降低图片质量]、[调整图片规格]、 [采用编辑器]、[缩放图片] 等等。

其他方法:

2. [检查代码逻辑 ,主要看资源加载相关的部分代码]

3.[ 检查释放逻辑代码]

总之手机游戏的内存优化问题还是有很多需要改进的。。。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值