cocos2d 2.0+ Scale Bug ||性能下降||无休止的内存分配

时间:2013-06-19 07:59:48

标签: ios objective-c memory cocos2d-iphone scale

你们有没有人注意到将精灵缩放到100%以上会导致每帧的渲染时间增加而不会再次下降?

我已经建立了一个基于cocos2d 2.0模板的测试项目(我也用2.1进行了测试,它也确实发生了)。当触摸屏幕(使用iPad 3测试)时,它会创建100个精度为1.5的精灵 当有5000时,它将全部删除。当它们被移除时,渲染时间通常保持在0.016。通过双击主页按钮(导致某些中断发生),您可以将其恢复为0.001(当没有精灵时)。 我做了很多测试的时间和方法,我得出的结论是,只有在缩放时才会发生这种情况。

在0.016"模式"有一个恒定的内存增加(查看分配工具),一旦你双击主页按钮它再次缓慢下降。这些分配来自我的陀螺仪/加速度计代码 放在那里。在0.001"模式"它工作正常,但一旦渲染时间显示0.016内存被无限分配,它永远不会被释放。

特别是对于非常大的缩放,这件事很容易实现。有没有人知道如何解决这个问题?

在我的测试项目中触摸屏幕时会发生这种情况。您可以在这里下载: https://dl.dropboxusercontent.com/u/40859730/RenderTimeIssue.zip

static int spriteCount = 0;

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {

for (int i = 0; i < 100; i++) {
    CCSprite *icon = [CCSprite spriteWithFile: @"Icon.png"];
    [icon setPosition: ccp(arc4random() % 1000, arc4random() % 1000)];
    [self addChild: icon];
    icon.tag = spriteCount;

    // this line causes the "0.016 bug", comment it out and the frame rate does go back to 0.001 when 5000 sprites are reached
    icon.scale = 1.5f; // while scaling up more than 1.0 causes the problem, scaling down does not
    spriteCount++;
}

if (spriteCount >= 5000) {
    for (int i = 0; i < spriteCount; i++) {
        [self removeChildByTag: i cleanup: YES];
    }
    spriteCount = 0;
}

return YES;
}

编辑:以下是一些显示内存增加的图片: http://imgur.com/a/Jy70a

1 个答案:

答案 0 :(得分:0)

我在cocos2d 2.0上遇到过这个问题。 但是当我升级到2.1时,这不再发生了。

尝试将cocos2d升级到2.1版。渲染图像有很多性能改进。