如果在Cocos2d-iphone中玩了5-6次后游戏变慢

时间:2013-07-15 11:01:33

标签: cocos2d-iphone

这是我在游戏中遇到的一种新问题。我可以说我已经实现了游戏的所有代码。但我面临着问题。实际上发生的事情是,当我玩的时间超过 5-6次时,游戏会变慢,这意味着我们可以感觉到它的进展缓慢。但它的FPS是60,但FPS的波动发生在60到30之间。

在我的游戏中,我实施了 ARC 。我也可以看到每次场景中存在的对象数量相同

我还使用乐器来检查游戏中的内存泄漏,但游戏中有无内存泄漏。我无法显示代码,因为它是保密的。

但我无法解决这个问题。我想知道这背后的原因是什么,我该如何解决这个问题。

任何形式的帮助都会有所帮助

2 个答案:

答案 0 :(得分:3)

虽然我没有使用Apple玩具来执行此操作,但每次运行我的应用程序时都会执行类似快照的分析:我的每个类都内置了这样做的工具,以便我能够确切地确定在程序执行期间的任何时刻当前分配(未解除分配)的实例数。当我在项目中添加一个项目时,每个班级的工作量(比如大约1分钟)就可以了,但在项目的整个生命周期中都可以节省生命。

在评论中回到上面的问题,我不知道你的500K。现在唯一可以解决这个问题的人就是你。如果你的游戏有一个逻辑点(比如一个游戏主菜单),你可以在退出应用程序之前回来(我的意思是硬杀),在那个地方,我会在菜单绘制之后开始这样做:

// below code with cocos2d 2.x

NSLog(@"*** before purge ***");
[[CCTextureCache sharedTextureCache] dumpCachedTextureInfo];

[CCAnimationCache purgeSharedAnimationCache];
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrames];
[[CCDirector sharedDirector] purgeCachedData];
[self scheduleOnce:@selector(dumpTextures) delay:0.5f]; 

// let the run loop cycle a bit
// to give a chance for auto-release objects to be
// disposed from the pool ... 

-(void) dumpTextures {

    NSLog(@"*** after purge ***");
    [[CCTextureCache sharedTextureCache] dumpCachedTextureInfo];

}

并检查结果。寻找cocos2d仍然为你保留的任何纹理......到目前为止最可能的记忆力。我不认为5-50倍500K会在一个高达140Mb的游戏中产生很大的差异。

答案 1 :(得分:2)

泄漏内存和放弃内存之间存在差异。 ARC有助于泄漏,但它仍然允许您在不再需要时保留对对象的强引用。一个例子是保留周期。

您可以执行称为“快照分析”的技术。使用乐器时,它会显示游戏结束后不再需要的内存。

这里有一个关于快照的教程。 http://www.raywenderlich.com/23037/how-to-use-instruments-in-xcode