0

我有一个 MainMenuScene 和一个 GameScene ......

在 MainMenu 中,我有进入 GameScene 的按钮开始,在游戏中间我想重新启动或退出游戏,当我用另一个 GameScene 替换 GameScene 或只是去回到主菜单,然后再次回到新的 GameScene,FPS 开始下降,如果我这样做循环 1 次,FPS 从 60 下降到 30,如果我再次这样做,FPS 下降到 15,依此类推等等...

我认为问题在于内存泄漏,因为我让场景活着......但我没有检查并检查过,并且在任何地方都没有强烈引用该场景,并且启用了它的 ARC,我检查了 Instruments 配置文件和根据 Xcode 的仪器,没有任何内存泄漏。

有没有人遇到过这个问题......或者任何人知道我可能做错了什么?根据我在 CCDirector 的 ReplaceScene 方法中读到的内容,场景被破坏并替换为新场景,所以应该没有问题。

==忘了提:我在单例中对 GameLayer 和 GameScene 有一个弱引用,但是当我替换场景时,我立即将那些 2 nil 设置为,即使我不应该因为它们是弱引用但我以防万一。

添加图像以获得更多上下文: Dealloc 调试

通过上图,您可以看到每次调用 CCDirector 中的 ReplaceScene 时,场景,特别是 GameScenes,都会被释放。所以内存泄漏不是问题,但似乎场景没有被破坏,或者这就是我的想法,因为 FPS 每次都在不断下降。

第一个 GameScene 场景将替换为主菜单

来自 GameScene 的 ReplaceScene 之后的 MainMenuScene

从 MainMenuScene 替换了第二个 GameScene 场景

来自 GameScene 的 ReplaceScene 之后的第二个 MainMenuScene ......后来很少更换场景......

第 7 个 GameScene 场景从 MainMenuScene 替换

这里奇怪的是 MainMenu 根本没有受到影响,渲染时间是相同的......绘图调用是相同的(这是可以理解的,即使在 GameScene 中,drawCalls 保持不变。)但是在 GameScene FPS 不断下降,渲染时间变得非常长,这就是游戏变得异常缓慢的原因。

将继续检查。

4

1 回答 1

0

解决方案非常简单......除了批处理节点之外,所有内容都被正确释放,处理后台的特定批处理节点正在扼杀我的应用程序性能。

因此,对于那里的任何人,请记住在替换场景时检查您的 CCBatchNodes 和任何其他强引用是否连接到场景。释放几乎立即发生,但它有助于将被释放的父对象的子对象设置为 nil。但就我而言,SpriteBatchnode 是严重影响我的 FPS 渲染时间性能的节点。

感谢 LearnCocos2D,非常感谢您的帮助。

于 2013-07-21T08:48:44.243 回答