【问题标题】:Game restarts after segue to gameOverViewcontrollersegue 到 gameOver Viewcontroller 后游戏重新启动
【发布时间】:2015-11-01 17:25:44
【问题描述】:

我的精灵套件游戏有问题,我使用后立即重新启动 我的 gameoverviewcontroller 的模型 segue。
每次重新启动游戏后,fps 也会除以 2。
所以我实际上需要一种在我使用 segue 后删除游戏的方法。
我试过 self.dismissViewControllerAnimated(true, completion: 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)
}

最后,当玩家死亡时,我在游戏场景中使用它。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完成后游戏会自动重启。 有没有人知道我该如何解决这个问题,或者知道我应该如何使用驳回功能。

感谢您的问候

【问题讨论】:

    标签: ios swift sprite-kit skscene


    【解决方案1】:

    即使更改为另一个视图控制器,也会调用当前视图控制器的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)
         }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-09-08
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      相关资源
      最近更新 更多