2016-05-09 2 views
0

Я хотел бы закрыть SKScene после игры и вернуться в главное меню.Swift, SpriteKit, Segue между GameViewController и MainViewController после GameOver

От MainViewController к GameViewController, я сделал раскадровки SEGUE с prepareForSegue передать некоторые данные из 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 

    } 
} 

А потом Я объявил View Controller в GameScene.swift, как это:

weak var viewController:GameViewController? = GameViewController() 

у меня также есть в GameScene.sw IFT следующей функции для вызова 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) 

} 

Unfortunatly, печать (ViewController) возвращает ноль, и, конечно, это не закрывайте ViewController.

Где я могу сделать ошибку?

ответ

0

Создать функцию как этот

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() туда, куда вы хотите этот переход состоится.

Вам не нужно ничего отклонять, потому что он создает новую сцену каждый раз при переходе.