【发布时间】:2014-01-16 15:13:39
【问题描述】:
根据cocos2d best practices,我已将我的游戏关键资产打包到 4 个单独的精灵表中。 FWIW,我用TexturePacker 创建了这些表格,并用TinyPng 处理了生成的.pngs。 4 个中最大的 sprite 表(包含我的对话框)是 375KB large 和 2048x2048px -hd 变体(又名 @2x)。
我注意到我的游戏中有内存问题,所以我在Instruments 中启动了Allocations 工具。果然,Main scene 在视网膜设备上使用了~250MB 内存(在非视网膜设备上使用~95MB)。哇!巨大的!更糟糕的是,较旧的视网膜设备(例如 iPhone 4)存在相当大的延迟。
我做的第一件事是删除一个精灵表,看看这是否是问题所在。果然,只是不加载单个精灵表会使视网膜内存下降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;
}
}
问题:为什么我的精灵表会消耗这么多内存,我该如何解决?
到目前为止我尝试过的事情:
-
[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA4444]帮助减少了约 20% 的内存占用,但我只能将它与一些精灵表一起使用(例如,其他有径向渐变,效果不佳)。 -
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames]似乎没有帮助(内存占用保持不变)
【问题讨论】:
标签: ios iphone cocos2d-iphone