Swift,SpriteKit,GameViewController 和 MainViewController 在 GameOver 之后的 Segue

Posted

技术标签:

【中文标题】Swift,SpriteKit,GameViewController 和 MainViewController 在 GameOver 之后的 Segue【英文标题】:Swift, SpriteKit, Segue between GameViewController and MainViewController after GameOver 【发布时间】: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。

我在哪里犯错了?

【问题讨论】:

【参考方案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(),无论您想在哪里进行此转换。

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

【讨论】:

以上是关于Swift,SpriteKit,GameViewController 和 MainViewController 在 GameOver 之后的 Segue的主要内容,如果未能解决你的问题,请参考以下文章

Swift / SpriteKit:如何创建水滴效果?

Swift,SpriteKit:如何保存场景的整个进度

将 SKSpriteNode 移动 Y - Swift 2 + SpriteKit

SpriteKit 设备方向改变导致 SKLabelNode 变形 Swift

这个带有 SpriteKit 代码的 Swift 没有达到预期的效果

SpriteKit,Swift - 滚动视图不显示