游戏在转到 gameOver Viewcontroller 后重新启动

Game restarts after segue to gameOverViewcontroller

我的 sprite kit 游戏有问题,它在我使用后立即重新启动 我的 gameoverviewcontroller 的模型 segue。
每次重新启动游戏后,fps 也会除以 2。
所以我实际上需要一种在使用 segue 后删除游戏的方法。
我试过 self.dismissViewControllerAnimated(true, completion: nil) 但我真的不知道我应该放在哪里。

我的情节提要中有 3 个视图控制器,第一个使用带有模式转场的按钮到第二个我玩游戏场景的按钮。

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    print("start vc")

    // Configure the view.
    let skView = self.view as! SKView
    skView.showsFPS = true
    skView.showsNodeCount = true
    skView.multipleTouchEnabled = true

    /* Sprite Kit applies additional optimizations to improve rendering performance */
    skView.ignoresSiblingOrder = true

    /* Set the scale mode to scale to fit the window */
    Scene = GameScene(size: skView.bounds.size)
    Scene.scaleMode = .AspectFill
    Scene.viewController = self

    skView.presentScene(Scene)
}

最后当玩家死亡时我在游戏中使用这个scene.swift

self.viewController?.performSegueWithIdentifier("GameOver", sender: self.viewController!)

这在 gameviewcontroller.swift

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "GameOver" {
        let destViewController: GameOverViewController = segue.destinationViewController as! GameOverViewController
        destViewController.Score = Scene.Score
        destViewController.screenShot = Scene.image
        print("segue")
        Scene.viewController = nil
    }
}

转到第三个视图控制器。

现在我已经把多个打印命令扔掉了我的代码。
我看到游戏在 segue 完成后自动重新启动。 有没有人知道我如何解决这个问题或知道我应该如何使用关闭功能。

谢谢你的问候

viewWillLayoutSubviews 即使切换到另一个视图控制器也会调用当前视图控制器。

所以在你的情况下保护视图,这样场景就不会被创建两次(因此,游戏重新启动):

 override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    print("start vc")

    // Configure the view.
    let skView = self.view as! SKView
    if skView.scene == nil { // This check makes sure we won't create the scene twice
       skView.showsFPS = true
       skView.showsNodeCount = true
       skView.multipleTouchEnabled = true

       /* Sprite Kit applies additional optimizations to improve rendering performance */
       skView.ignoresSiblingOrder = true

       /* Set the scale mode to scale to fit the window */
       Scene = GameScene(size: skView.bounds.size)
       Scene.scaleMode = .AspectFill
       Scene.viewController = self

       skView.presentScene(Scene)
     }
}