Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 转到gameOverViewcontroller后游戏重新启动_Ios_Swift_Sprite Kit_Skscene - Fatal编程技术网

Ios 转到gameOverViewcontroller后游戏重新启动

Ios 转到gameOverViewcontroller后游戏重新启动,ios,swift,sprite-kit,skscene,Ios,Swift,Sprite Kit,Skscene,我有一个问题,我的精灵套件游戏,它重新启动后,我立即使用 一个模型连接到我的游戏概览控制器。 每次重新启动游戏后,fps也会被2除。 因此,我实际上需要一种在使用segue后删除游戏的方法。 我试过self.dismissViewControllerAnimated(对,完成:nil),但我真的不知道应该放在哪里 我的故事板中有3个视图控制器1,一开始,它使用一个带有模式序列的按钮来切换到我播放游戏场景的第二个按钮 override func viewWillLayoutSubviews() {

我有一个问题,我的精灵套件游戏,它重新启动后,我立即使用 一个模型连接到我的游戏概览控制器。
每次重新启动游戏后,fps也会被2除。
因此,我实际上需要一种在使用segue后删除游戏的方法。
我试过self.dismissViewControllerAnimated(对,完成:nil),但我真的不知道应该放在哪里

我的故事板中有3个视图控制器1,一开始,它使用一个带有模式序列的按钮来切换到我播放游戏场景的第二个按钮

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)
}
当玩家死后,我会在游戏场景中使用这个

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
    }
}
转到第三个视图控制器

现在我已将多个打印命令放在代码中。
我看到游戏在赛格结束后自动重启。 任何人都知道我如何解决这个问题,或者知道我应该如何使用dismise函数


感谢您的帮助,即使在更改为其他视图控制器时,也会调用当前视图控制器的子视图

因此,在您的情况下,保护视图,使场景不会被创建两次(因此,游戏将重新启动):

 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)
     }
}