你们有没有人注意到将精灵缩放到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
答案 0 :(得分:0)
我在cocos2d 2.0上遇到过这个问题。 但是当我升级到2.1时,这不再发生了。
尝试将cocos2d升级到2.1版。渲染图像有很多性能改进。