【问题标题】:Swift, SpriteKit, Segue between GameViewController and MainViewController after GameOverSwift,SpriteKit,GameViewController 和 MainViewController 在 GameOver 之后的 Segue
【发布时间】:2016-05-09 22:33:41
【问题描述】:

我想在游戏结束后关闭 SKScene 并返回主菜单。

从 MainViewController 到 GameViewController,我用 prepareForSegue 做了一个 Storyboard Segue,将一些数据从 MainViewController 传递到 GameViewController

在GameViewController中,我做了这样的:

    override func viewDidLoad() {
    super.viewDidLoad()

    if let scene = GameScene(fileNamed:"GameScene") {
        let skView = self.view as! SKView
        skView.showsFPS = true
        skView.showsNodeCount = true

        skView.ignoresSiblingOrder = true

        scene.scaleMode = .AspectFill

        skView.presentScene(scene)

        scene.viewController = self

    }
}

然后,我在 GameScene.swift 中声明了 View Controller,如下所示:

weak var viewController:GameViewController? = GameViewController()

我在GameScene.swift中也有如下函数调用endGameScene.swift:

    func endGame() {
    // 1
    gameOver = true

    // 2
    // Save high score
    GameState.sharedInstance.saveState()

    // 3
    let reveal = SKTransition.fadeWithDuration(0.5)
    let endGameScene = EndGameScene(size: self.size)
    self.view!.presentScene(endGameScene, transition: reveal)

}

最后,endGameScene.swift 像这样调用dismissViewControllerAnimated:

weak var viewController:GameViewController? = GameViewController()       

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    // Transition back to the Game
    /*let reveal = SKTransition.fadeWithDuration(0.5)
    let gameScene = GameScene(size: self.size)
    self.view!.presentScene(gameScene, transition: reveal)*/

    print(viewController)
    self.viewController?.dismissViewControllerAnimated(true, completion: nil)

}

不幸的是,print(viewController) 返回 nil,当然,它不会关闭 ViewController。

我在哪里犯错了?

【问题讨论】:

    标签: ios swift sprite-kit


    【解决方案1】:

    像这样创建函数

    func goToGameScene(){
        let gameScene:GameScene = GameScene(size: self.view!.bounds.size) // create your new scene
        let transition = SKTransition.crossFadeWithDuration(1.5) // create type of transition (you can check in documentation for more transtions)
        gameScene.scaleMode = SKSceneScaleMode.Fill
        self.view!.presentScene(gameScene, transition: transition)
    }
    

    然后只需致电goToGameScene(),无论您想在哪里进行此转换。

    您无需关闭任何内容,因为每次转换时它都会创建一个新场景。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-23
      • 2016-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      • 2012-08-29
      相关资源
      最近更新 更多