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学习群)欢迎你的到来哦。看了博文给点脚印呗,谢谢啦~~
cocos2d-x3.2中怎样优化Cocos2d-X游戏的内存的更多相关文章
- 如何优化cocos2d程序的内存使用和程序大小
在我完成第一个游戏项目的时候,我深切地意识到"使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰".而我刚开始接触cocos2d的时候,社区里面的人 ...
- (译)如何优化cocos2d程序的内存使用和程序大小:第二部分(完)
前言:从上周发布教程的微博反应情况来看,cocos2der们对于游戏的内存问题还是非常关心的.本文是上一篇博文的续,旨在教大家如何减少cocos2d程序的大小. 全文如下: 减少你的程序的大小 把纹理 ...
- 如何优化cocos2d程序的内存使用和程序大小:第一部分
译者: 在我完成第一个游戏项目的时候,我深切地意识到“使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰”.而我刚开始接触cocos2d的时候,社区里面的人们讨论了一个 ...
- 如何优化cocos2d程序的内存使用和程序大小:第一部分_(转)
译者: 在我完成第一个游戏项目的时候,我深切地意识到“使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰”.而我刚开始接触cocos2d的时候,社区里面的人们讨论了一个 ...
- 如何优化cocos2d/x内存使用和程序大小的程序
从最初的:http://www.himigame.com/iphone-cocos2d/1043.html 译者: 在我完毕第一个游戏项目的时候.我深切地意识到"使用cocos2d来制作游戏 ...
- 优化cocos2d/x程序的内存使用和程序大小
本站文章均为李华明Himi原创,转载务必在明显处注明:转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2d/1043.html ☞ ...
- 怎样优化cocos2d/x程序的内存使用和程序大小
再次感谢原创者:Steffen Itterheim.原创博客原文地址: http://www.learn-cocos2d.com/2012/11/optimize-memory-usage-bundl ...
- 如何在Cocos2D 1.0 中掩饰一个精灵(一)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 原帖来自Ray Wunderlich写的精彩的文章 How To ...
- Cocos2D v3.x中关于重叠触摸层优先级的问题
在Cocos2D v2.x版本中可以通过以下方法设置本层的触摸优先级: [[CCDirector sharedDirector].touchDispatcher addTargetedDelegate ...
- cocos2D v3.x 中action的回调block变化
cocos2D v2.x中有带参数的回调block: id blk = [CCCallBlockN actionWithBlock:^(CCNode *node){ node.position = o ...
随机推荐
- My way to Python - Day012 - 消息中间件
消息中间件介绍 消息中间件的概念 消息中间件是在消息传输过程中保存消息的容器.消息中间件在将消息从它的源中继到它的目标时充当中间人的作用.队列的主要作用是提供路由并保证消息的传递:如果发生消息接收者不 ...
- 使用VTemplate模板引擎动态生成订单流程图
1.VTemplate模板引擎的简介 VTemplate模板引擎也简称为VT,是基于.NET的模板引擎,它允许任何人使用简单的类似HTML语法的模板语言来引用.NET里定义的对象.当VTemplate ...
- Asp.Net EF Code First 简单入门
今天在上班期间花了点时间学习了一下微软的EntityFramework Code First技术,这篇文章只是简单的入门,不多废话,下面直入主题. 一.首先添加一个解决方案,接着添加一个web网站,D ...
- jquery悬停tab2
<style> *{ margin:0; padding:0;} body { font:12px/19px Arial, Helvetica, sans-serif; color:#66 ...
- js中window.print()去除页眉页脚
//jsp打印时去除页眉页页脚 打印前加入下面代码即可 var HKEY_Root,HKEY_Path,HKEY_Key; HKEY_Root="HKEY_CURRENT_USER" ...
- C#创建Windows服务的几个注意事项
1.服务安装后的自动启动:服务的StartType即使配置成Automatic,在首次安装成功之后还是要在服务列表中找到并手工启动.此外,可以通过在ProjectInstaller中添加AfterIn ...
- 快速搭建Android 开发环境-使用ADT Bundle
一.搭建Android开发环境 近日要学Android开发基础,就着手搭建Windows下的Android开发环境. 找了一些相关的博文参考,基本上都是要分别下载和安装JDK, Eclipse, An ...
- [总结] Stack: Java V.S. C++
小结一下Stack 的主要API操作. 在c++ 和 java 中,stack 的操作几乎相同,只有查询栈顶元素一项操作的名称不同 (top() v.s. peek()) . 此外,在构造函数中,Ja ...
- html中embed标签的用法
(一).基本语法: embed src=url 说明:embed可以用来插入各种多媒体,格式可以是 Midi.Wav.AIFF.AU.MP3等等,Netscape及新版的IE 都支持.url为音频或视 ...
- 自定义View—绘制基本图形
一.Canvas能够绘制哪些图形 二.