- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有点疯了。我从午餐介绍场景那里得到了一个 AppDelegate。我使用 TexturePacker 获取 plist 和 png 文件使用 RGBA4444 像素格式,并在 XCode 中将“压缩 PNG 文件”选项设置为“否”,以保留优化文件。
我的 AppDelegate 配置了默认像素格式 kEAGLColorFormatRGB565:
CCGLView *glView = [CCGLView viewWithFrame:[window_ bounds]
pixelFormat:kEAGLColorFormatRGB565 //kEAGLColorFormatRGBA8
depthFormat:0 //GL_DEPTH_COMPONENT24_OES
preserveBackbuffer:NO
sharegroup:nil
multiSampling:NO
numberOfSamples:0];
场景 1:我运行我的 AppDelegate 并推送 Introduction 场景而不更改默认像素格式(换句话说,保留默认 AppDelegate 设置)并获得以下分配分析。当从 plist 文件创建第一个 CCSprite 帧时,蓝色峰值对应于 IntroductionScene 中的 16 MB 内存分配(蓝色峰值对应于 16 MB,我无法使用这些值截取更好的屏幕截图显示,其余对应于分配的大约 2MB 内存 - 抱歉)。
场景 2:我在 IntroBackgroundScene 中将默认像素格式设置为 kCCTexture2DPixelFormat_RGBA4444(如下所示)。
@implementation IntroBackgroundScene
-(id) init
{
if ((self = [super init]))
{
[CCTexture2D setDefaultAlphaPixelFormat:kCCTexture2DPixelFormat_RGBA4444];
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"Intro background.plist"];
background = [CCSprite spriteWithSpriteFrameName:@"Intro background 0.png"];
background.anchorPoint = CGPointMake(0.5f, 0.5f);
background.position = CGPointMake(160.0f, 0.0f);
[self addChild:background];
foreground = [CCSprite spriteWithSpriteFrameName:@"Intro background 1.png"];
foreground.anchorPoint = CGPointMake(0.5f, 0.5f);
foreground.position = CGPointMake(160.0f, 0.0f);
[self addChild:foreground z:2];
这使我的内存使用量达到峰值 26 MB(即使像素格式设置设置为 kCCTexture2DPixelFormat_RGBA4444)。见下文(蓝色峰值对应 26 MB,我无法截取显示值的更好屏幕截图 - 抱歉):
我以为它会减少内存分配而不是增加。这是为什么?
其次,为什么内存分配达到峰值(16/26MB)然后下降到 2MB?由于我使用的是优化的纹理表,因此我希望它始终为 2MB。
这是 TexturePacker build设置:
我正在为 Cocos2d 构建并使用激活了 RGBA4444 的 2048*2048 像素表。它应该只消耗每个像素 2 个字节,总共大约 8 MB。 我不明白为什么内存分配在 IntroBackground 初始化方法中达到 16 MB 的峰值,然后又下降到只有 2MB(而不是 8MB)。
任何有关如何分析和理解这一点的见解都将不胜感激。
编辑:来自第 4 代 iPod touch 的纹理哑信息:
cocos2d: "Intro background.png"rc=7 id=3 2048 x 2048 @ 32 bpp => 16384 KBcocos2d:CCTextureCache dumpDebugInfo:2 个纹理,16448 KB(16.06 MB)
看起来纹理表中的所有帧都临时加载到内存中。这是正常的吗? 有什么办法可以避免这种情况吗? (当加载多张场景时,这可能会导致内存泄漏)
最佳答案
我的猜测是(解释峰值)应用程序具有 1) 在核心中加载压缩数据流,2) 在核心中解压缩...因此同时保存压缩和解压缩以及过程中使用的辅助对象... 然后当内存块传递给 GPU 时,内存被释放(并且纹理的内存需求从主进程中扣除)... 假设跟踪是在设备上进行的。模拟器不使用主机的 GPU,因此在模拟器上进行相同的跟踪会显示更高的内存占用,其中包括纹理的内存要求。
关于ios - Cocos2d 2.0 : I get a higher memory allocation peak setting default pixel format to kCCTexture2DPixelFormat_RGBA4444,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15743462/
我是一名优秀的程序员,十分优秀!