【发布时间】:2015-03-26 19:25:54
【问题描述】:
所以我发现了一些关于从 Skscene 过渡到 uiviewcontroller 的帖子,然后我让它工作了。每当用户赢得或输掉我的游戏关卡时,都会调用此 segue 和 unwind segue。
这适用于level1,但一旦我赢得level2,我就会得到
fatal error: unexpectedly found nil while unwrapping an Optional value
在下面我调用游戏结束函数的那一行
在我的游戏场景中我有:
class GameScene: SKScene, SKPhysicsContactDelegate {
//next level / try again segue
var viewController : GameViewController!
在 GameViewController 我初始化这个属性
var currentLevel: Int!
override func viewDidLoad() {
super.viewDidLoad()
currentLevel = gameScene.currentLevel
if let scene = GameScene.level(currentLevel) {
// Configure the view.
let skView = self.view as SKView
skView.showsFPS = true
skView.showsNodeCount = true
/* Sprite Kit applies additional optimizations to improve rendering performance */
skView.ignoresSiblingOrder = true
/* Set the scale mode to scale to fit the window */
scene.scaleMode = .AspectFill
skView.presentScene(scene)
//initialize VC
scene.viewController = self
}
func gameOver() {
performSegueWithIdentifier("gameOver", sender: nil)
}
@IBAction func perpareForUnwind(unwindSegue: UIStoryboardSegue) {
}
最后我从 gameScene 中的 win() 函数调用 gameOver
func newGame() {
view!.presentScene(GameScene.level(currentLevel))
}
func win() {
if (currentLevel < 3) {
currentLevel++
//present win view - with option to restart, next level, or home
}
println(currentLevel)
runAction(SKAction.sequence([SKAction.waitForDuration(2),
SKAction.runBlock(newGame)]))
self.viewController.gameOver() // this is the error!
}
所以这可以从 level1 到 level2 但不会从 level2 到 level3
因为 viewDidLoad 只被调用一次,它只是从 lvl1 初始化到 lvl2 然后变为 nil。我怎样才能确保它每次都被初始化。我应该把这个设置代码放在 viewDidLoad 以外的地方吗?
【问题讨论】:
标签: ios iphone swift sprite-kit