为什么第四次运行我的spritekit场景后会出现大量延迟?

时间:2016-08-23 17:19:10

标签: ios swift uiviewcontroller sprite-kit

我正在开发一个使用ViewControllers和SpriteKit场景的spritekit游戏。基本上,应用程序的结构是你打开一个菜单(视图控制器),通过一个按钮按下模式将你移动到加载GameScene(skscene)的游戏(视图控制器)。

当您输掉游戏时,您将通过模式segue发送到屏幕上的游戏(视图控制器):gameVC?.performSegueWithIdentifier("goToGameOver", sender: gameVC)此segue位于GameScene中,scene.gameVC = self位于游戏视图控制器中。 gameVC在GameScene中初始化为var gameVC: UIViewController?。在游戏结束屏幕上,您可以返回菜单,也可以使用按钮初始化的模态段再次播放(返回游戏视图控制器)。

当你去GameScene四次以上时会出现问题。 GameScene第五次打开(无论是从菜单vc还是从vc游戏),游戏都难以置信。屏幕右下方的fps计数器表示游戏产生1.5 fps。

我认为问题在于GameViewController& GameScene没有被正确解雇(每次应用程序移动到GameScene时应用程序的内存使用量都会增加),但我不知道如何正确地解雇它们。我用过

self.removeFromParent()
self.view?.presentScene(nil)

作为尝试在segue到GameOver代码运行之前和之后立即解散GameScene的一种方式,但无济于事。我也想过放松segue,但是我无法放松到我尚未到过的视图控制器(游戏结束)。我完全没有想法,这是一个破坏游戏的错误。我真的很感激一些帮助。非常感谢。

2 个答案:

答案 0 :(得分:3)

你基本上是在SpriteKit做你不应该做的事情。在SpriteKit中不建议使用多个视图控制器。

最好只有一个视图控制器并有多个场景(菜单场景,游戏场景)。

你应该阅读这个问题。

Swift: How to handle view controllers for my game

答案 1 :(得分:0)

嘿,我遇到了同样的问题。我把这行代码放在我的场景结束时回到我的viewcontroller,然后延迟就消失了。

self.viewController!.dismissViewControllerAnimated(true,completion:nil)