Cocos2d Sprite工作表占用大量内存

赞恩·克莱斯(Zane Claes)

根据cocos2d最佳做法,我将我的游戏关键资产打包到4个单独的Sprite工作表中。FWIW,我用TexturePacker创建了这些图纸,并用TinyPng处理了生成的.png4个中最大的Sprite工作表(包含我的对话框)375KB很大且2048x2048px处于-hd变化形式(aka @2x)。

我一直在注意游戏中的内存问题,因此Allocations在中启动了该工具Instruments果然,在视网膜设备上(非视网膜设备上)Main scene正在使用~250MB内存~95MB哇!巨大!更糟糕的是,较旧的视网膜设备(例如,iPhone 4)存在相当大的滞后。

我要做的第一件事是删除一张精灵表,看是否是问题所在。果然,根本不加载单个Sprite表,从而使视网膜记忆降低了60MB考虑到有问题的精灵表仅268KB在文件大小中,我很震惊这是一个很大的问题。

这是我用来(在应用启动过程中)“预加载”精灵表的代码:

- (BOOL)cacheSpriteSheet:(NSString*)sheetName 
{
    if(!sheetName) 
    {
        return NO;
    }
    NSString *fpSheet = [[AMAssetManager sharedManager] pathForSpriteSheet:sheetName];
    if(fpSheet) 
    {
        [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:fpSheet];
        return YES;
    }
    else 
    {
        Warn(@"NULL sheet for %@",sheetName);
        return NO;
    }
}

问题:为什么我的Sprite Sheet占用了如此多的内存,我该如何解决?

到目前为止我尝试过的事情:

  1. [CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA4444] 有助于将内存占用量减少约20%,但我只能将其与某些Sprite工作表一起使用(例如,其他Sprite工作表具有径向渐变,但效果不佳)。
  2. [[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames] 似乎没有帮助(内存占用量保持不变)
伊夫·勒伯格

文件大小与“核心”大小无关。像素是一个像素,并且最有可能的是,这2048x2048像素中的每个像素都占用32位。您的选择是:

  • 拆分您的Sprite表,并在需要Sprite时“及时”加载。
  • 在模拟器上运行时,不要信任仪器。可以肯定的使用

    [[CCTextureCache sharedTextureCache] dumpCachedTextureInfo]

知道您的精灵实际上消耗了多少内存。

  • 模拟器上的内存分配将很少给您有用的指示。构建发行版本,定位设备并监视进程大小。在获得可怕的内存警告之前,这更有可能是决定性因素。
  • 不要使用仪器/模拟器来获得对性能和用户体验的任何赞赏。他们说谎。使用您计划支持应用程序的最低端设备作为石蕊测试
  • 即使删除未使用的精灵帧,即使单个(使用的)精灵帧引用了纹理,也将保留该纹理帧。

阅读这篇非常有趣的文章,以了解纹理与内存以及所需的权衡。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

cocos2d sprite永远重复播放动画

来自分类Dev

Sprite框架动画Cocos2d 3.0

来自分类Dev

重复使用相同的Sprite Cocos2d 3.0

来自分类Dev

Sprite Kit的size属性的Cocos2d等效项

来自分类Dev

创建表可以在cocos2d中滚动

来自分类Dev

在Cocos2d中动画精灵表

来自分类Dev

在Sprite Cocos2d上添加box2d主体

来自分类Dev

如何将cocos2d V3.3添加到工作区并配置项目以在iOS中使用cocos2D V3.3

来自分类Dev

Swift版本的Cocos2d代码:sprite1.colorRGBA

来自分类Dev

为什么不能覆盖cocos2d :: sprite的draw方法?

来自分类Dev

在Cocos2D V3中单击时展开的Sprite按钮

来自分类Dev

如何通过SpriteKit(如Cocos2D)使Sprite倾斜/剪切?

来自分类Dev

不断向上和向下移动Sprite Cocos2d 3.0

来自分类Dev

Cocos2d:组成将包含多个Sprite的对象的最佳方法

来自分类Dev

在Cocos2D V3中单击时展开的Sprite按钮

来自分类Dev

如何通过SpriteKit(如Cocos2D)使Sprite倾斜/剪切?

来自分类Dev

Cocos2D和Google IOS Analytics无法正常工作

来自分类Dev

我可以将Sprite Kit中的SKNode等同于Cocos2D中的CCLayer使用吗

来自分类Dev

在运行时更改Sprite框架-Cocos2d v 3或3.2.1-找不到setDisplayFrame

来自分类Dev

使用RGBA8888和RGBA4444加载动画,显示内存使用没有差异,平台cocos2D和iOS

来自分类Dev

cocos2d:从iOS 7.1开始,当我将手机切换为希伯来语时,CCLabelTTF的工作中断了

来自分类Dev

在ccTouchBegan下,代码“ if(![super itemForTouch:touch]){return NO;}”的代码是什么,以及如何使其在cocos2d v3中工作?

来自分类Dev

可拖动CCNode Cocos2d

来自分类Dev

Cocos2D弹丸速度

来自分类Dev

Cocos2d js触摸事件

来自分类Dev

Cocos2D中的磁效应

来自分类Dev

双击Cocos2d Android JAVA

来自分类Dev

WebView Cocos2d xna

来自分类Dev

照亮房间Cocos2d

Related 相关文章

  1. 1

    cocos2d sprite永远重复播放动画

  2. 2

    Sprite框架动画Cocos2d 3.0

  3. 3

    重复使用相同的Sprite Cocos2d 3.0

  4. 4

    Sprite Kit的size属性的Cocos2d等效项

  5. 5

    创建表可以在cocos2d中滚动

  6. 6

    在Cocos2d中动画精灵表

  7. 7

    在Sprite Cocos2d上添加box2d主体

  8. 8

    如何将cocos2d V3.3添加到工作区并配置项目以在iOS中使用cocos2D V3.3

  9. 9

    Swift版本的Cocos2d代码:sprite1.colorRGBA

  10. 10

    为什么不能覆盖cocos2d :: sprite的draw方法?

  11. 11

    在Cocos2D V3中单击时展开的Sprite按钮

  12. 12

    如何通过SpriteKit(如Cocos2D)使Sprite倾斜/剪切?

  13. 13

    不断向上和向下移动Sprite Cocos2d 3.0

  14. 14

    Cocos2d:组成将包含多个Sprite的对象的最佳方法

  15. 15

    在Cocos2D V3中单击时展开的Sprite按钮

  16. 16

    如何通过SpriteKit(如Cocos2D)使Sprite倾斜/剪切?

  17. 17

    Cocos2D和Google IOS Analytics无法正常工作

  18. 18

    我可以将Sprite Kit中的SKNode等同于Cocos2D中的CCLayer使用吗

  19. 19

    在运行时更改Sprite框架-Cocos2d v 3或3.2.1-找不到setDisplayFrame

  20. 20

    使用RGBA8888和RGBA4444加载动画,显示内存使用没有差异,平台cocos2D和iOS

  21. 21

    cocos2d:从iOS 7.1开始,当我将手机切换为希伯来语时,CCLabelTTF的工作中断了

  22. 22

    在ccTouchBegan下,代码“ if(![super itemForTouch:touch]){return NO;}”的代码是什么,以及如何使其在cocos2d v3中工作?

  23. 23

    可拖动CCNode Cocos2d

  24. 24

    Cocos2D弹丸速度

  25. 25

    Cocos2d js触摸事件

  26. 26

    Cocos2D中的磁效应

  27. 27

    双击Cocos2d Android JAVA

  28. 28

    WebView Cocos2d xna

  29. 29

    照亮房间Cocos2d

热门标签

归档