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的主要内容,如果未能解决你的问题,请参考以下文章
将 SKSpriteNode 移动 Y - Swift 2 + SpriteKit
SpriteKit 设备方向改变导致 SKLabelNode 变形 Swift