0

你们有没有人注意到,将精灵缩放到 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

4

1 回答 1

0

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

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

于 2013-06-19T18:04:06.257 回答