当ReplacingScene但Cocos2d FPS下降但没有保留Scene并且它与ARC一起

时间:2013-07-20 17:06:42

标签: cocos2d-iphone game-development

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

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

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

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

== 忘了提一下: 我对Singleton中的GameLayer和GameScene有一个弱引用,但是当我替换场景时,我立即设置了那两个nil,即使我不应该因为它们是弱引用但我这样做以防万一。

添加图片以获取更多背景信息: Dealloc Debug

使用上面的图像,您可以看到每次调用来自CCDirector的ReplaceScene时,场景,特别是GameScenes,都会被取消分配。所以内存泄漏不是问题所在,但似乎场景没有被破坏,或者这就是我的想法,因为FPS每次都在不断下降和丢弃。

1st GameScene scene will be replaced with Main Menu

MainMenuScene After ReplaceScene from GameScene

2nd GameScene Scene Replaced from MainMenuScene

2nd MainMenuScene after ReplaceScene from GameScene ......以后很少有人替换......

7th GameScene scene replaced from MainMenuScene

这里奇怪的是MainMenu并没有受到影响,渲染时间是相同的......绘制调用是相同的(这是可以理解的,即使在GameScene中,drawCalls保持不变。)但是在GameScene中,FPS不断下降,渲染时间变得巨大,这就是为什么游戏变得非常慢。

会继续检查。

1 个答案:

答案 0 :(得分:0)

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

因此,对于那里的任何人,请记得检查您的CCBatchNodes,并在更换场景的那一刻将任何其他强引用连接到场景。释放几乎立即发生,但它有助于设置被释放的父对象的nil子对象。但在我的情况下,SpriteBatchnode是影响我的FPS的一个因素,可以提高时间性能。

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