什么消耗了90%的内存?
是纹理(textures)
优化方案:
1).cocos2d里面纹理加载分为两个阶段:1.从图片文件中创建一个UIImage对象。2.以这个创建好的UIImage对象来创建CCTexture2D对象。这意味着,当一 个纹理被加载的时候,在短时候内,它会消耗两倍于它本身内存占用的内存大小。(译注:为什么只是短时间内呢?因为autoRelease pool和引用计数的关系,临时创建的UIImage对象会被回收。)
2).不要使用JPG图片!
3).最快速地减少纹理内存占用的办法就是把它们作为16位颜色深度的纹理来加载。cocos2d默认的纹理像素格式是32位颜色深度。如果把颜色深度减半,那么 内存消耗也就可以减少一半。并且这还会带来渲染效率的提升,大约提高10%。
你可以使用CCTexture2D对象的类方法setDefaultAlphaPixelFormat来更改默认的纹理像素格式
4).TexturePacker PNG 图片优化
5).减少声音文件大小
载入纹理时按照从大到小的顺序,并且分帧加载。
1.载入纹理时按照从大到小的顺序,并且分帧加载
2.资源格式的选择。主要有3个因素会影响纹理内存,即纹理格式(压缩还是非压缩)、颜色深度和大小。
推荐纹理格式为pvr.ccz,16位颜色深度
3.减少绘制调用和上传gpu压力。控制避免有较大的纹理一次上传到显存中,尽量将散图打到一张整图中,一般情况下每帧上传一张1024*1024的rgba8888格式的纹理是不 会出现卡顿的
4.降低UI复杂度。
5.UI设计的时候要提高UI通用资源的使用率。
6.动画文件的处理。动画一般有两种选择,帧动画和骨骼动画。
帧动画的优点就是运算不耗性能,并且表现较好,缺点就是当帧数较多时,资源量比较大,并且占用内存较高,所以不太适合做过于复杂的动画
骨骼动画的特点就是节省资源,一套骨骼可以做很多套动作,新增动作也不会对文件大小有明显的增加,缺点也比较明显,就是因为骨骼动画是通过计算,然后进 行旋转,位移等实现的,所以当动画比较复杂,骨骼数量较多时,计算量就会很大,对CPU的计算增加了压力,压力过大时就会掉帧卡顿。
7.游戏音效的规格及优化。背景音乐文件大小应该低于800KB,最简单的方法就是减少背景音乐时间然后重复播放。音频文件采样率大约在96-128kbps为佳,比特率44k Hz就够了。
8.游戏逻辑的相关优化。在代码中,不要在主循环中做复杂的逻辑处理,例如for循环更新、查找等,可以利用缓冲等技术,解决和优化在主循环中每帧的效能。
9.代码级别的优化。这点比较简单,在编写程序时,算法最优,并且不要有内存泄漏等。

获取游戏内存使用的一些有用的信息。
CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo();
Director::getInstance()->getTextureCache()->removeUnusedTextures();
Director::getInstance()->getTextureCache()->removeTextureForKey(“Images/grossinis_sister2.png”)
Director::getInstance()->getTextureCache()->removeAllTextures();

释放资源的代码
CCAnimationCache::purgeSharedAnimationCache();
SpriteFrameCache::getInstance()->removeUnusedSpriteFrame();
CCTextureCache::getInstance()->removeUnusedTextures();
CCTextureCache::getInstance()->getCachedTextureInfo();
在onEnterTransitionDidFinish 执行后过一段时间,再调用释放资源的方法,这样就可以确保资源被释放。
{
void onEnterTransitionDidFinish(){
scheduleOnce(CC_SCHEDULE_SELECTOR(SceneB::release), 2.0f);
}
void release()
{
CCAnimationCache::purgeSharedAnimationCache();
SpriteFrameCache::getInstance()->removeUnusedSpriteFrame();
CCTextureCache::getInstance()->removeUnusedTextures();
CCTextureCache::getInstance()->getCachedTextureInfo();
}
}
释放上一个场景所有资源用的是以下代码:
{
// 释放场景对象自己
scene->removeFromParentAndCleanup(true);
// 清理GUI管理类(这个不要放到最后清理)
GUIReader::getInstance()->destroyInstance();
// 清理场景管理(所有读取的场景都会被清理掉)
SceneReader::getInstance()->destroyInstance();
// 清理动作(这里指Action动作,不是动作编辑器的动作。)
Director::getInstance()->getActionManager()->removeAllActions();
// 清除动画数据
ArmatureDataManager::getInstance()->destroyInstance();
// 清理数据管理
DictionaryHelper::getInstance()->destroyInstance();
// 清理精灵帧
SpriteFrameCache::getInstance()->destroyInstance();
// 清理纹理
Director::getInstance()->getTextureCache()->removeAllTextures();
}

cocos2dx内存优化相关推荐

  1. cocos2d-x 内存优化之prv.ccz plist 文件加载

    首先对于使用过精灵的童鞋很熟悉CCSpriteBatchNode,至少大家都会知道它能优化精灵,但是至于优化原理这里简单说下: 一般使用精灵CCSprite的时候,都是直接使用[CCLayer* ad ...

  2. [zz]cocos2d-x如何优化内存的应用

    自身以前也写过cocos2d-x如何优化内存的应用,以及内存不够的情况下怎么样处置惩罚游戏.今天在微博中看到有友好简介了下内存,挺详细的.不晓得是谁写的,我纪录下. 一,IOS与图片内存 在IOS上, ...

  3. Cocos2dx引擎笔记——内存优化

    内存优化原理 纹理最耗应用内存, 纹理几乎会占据90%应用内存.所以尽量最小化应用的纹理内存使用,否则应用很有可能会因为低内存而崩溃. 认识瓶颈寻找方案 什么样的纹理最耗应用内存?消耗多少内存?利用苹 ...

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

    2014年05月24日更新 以前的关注点都是 怎么用 根本没有往深层次追踪过.为什么这么用.今天记录下: 如果我们用的是pvr.ccz的图片 加载到内存中是根据你到处是的像素格式来渲染到ui中.如到处 ...

  5. IOS 内存优化和调试技巧

    基础部分 1: 图片内存大小小结 a: 图片:是占用内存的大户,尤其是手机游戏图片资源众多.对图片资源在内存中占用量的计算成为J2ME游戏开发者的经常性工作,CoCoMo来解释一下如何计算图片在内存中 ...

  6. 深度学习框架的内存优化机制

    深度学习框架的内存优化机制 https://www.cnblogs.com/DicksonJYL/p/9576896.html 这篇博文简单介绍下深度学习框架的内存优化方式,主要参考资料1,也就是MX ...

  7. Android优化之内存优化倒计时篇

    本文来自网易云社区 作者:聂雷震 本篇文章介绍的内容是如何在安卓手机上实现高效的倒计时效果,这个高效有两个标准:1.刷新频率足够高,让用户觉得这个倒计时的确是倒计时,而不是幻灯片:2.不能占用太多的内 ...

  8. ANDROID内存优化(大汇总——中)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...

  9. JVM 内存优化设置

    from:http://blog.sina.com.cn/s/blog_707577700100vy4m.html 在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好 ...

最新文章

  1. 网络电话如何营造成熟的通信商业模式
  2. python无限次输入_在Raspberry Pi上的Python用户输入无限循环内部输入时很多输入错过了输入...
  3. 【面试必备】javascript的原型和继承
  4. 2008年10月10日股票池
  5. video_replay如何捕获和回放WebRTC视频流
  6. wingIDE设置python虚拟环境并运行
  7. 关掉微软Word的一些不必要的插件,提高启动速度
  8. Linux给GCC编译的应用程序创建服务
  9. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第10篇]RSA和强RSA问题有什么区别
  10. 分治算法兵乓球比赛日程(java)
  11. Setting the Background Image for a List Control
  12. macOS Big Sur M1机型,如何正确完成软件的系统扩展设置?
  13. [转]中国著名黑客你知道多少?
  14. 玩转C语言Socket网络编程
  15. CRLF、CR、LF详解
  16. 地磅无人值守称重系统怎样实现自动发货的?
  17. revit怎么上色?教你revit综合工具快速【元素上色】
  18. 4款口碑爆棚的电脑软件,每一款都值得拥有
  19. ubuntu系统如何连接到服务器,远程ubuntu系统怎么连接到服务器
  20. 区块链共识算法(4)分布式一致性算法Paxos

热门文章

  1. 十分钟搞懂手机号码一键登录
  2. 2022Java面试题大全(整理版)面试题附答案详解,最全面详细,看完稳了
  3. 在游戏策划中应用SCAMPER创新
  4. JavaScript的基本原理
  5. 你想成为一名核心开发者吗?
  6. Golang:实现断点续传(http单线程下载文件)
  7. Arrays.asList()
  8. PMP可以自学报考吗
  9. SyntaxError: Non-ASCII character '\xe6' in file test.py on line 1, but no encoding declared; see htt
  10. Opencv——视频跳帧处理