Swift:致命错误:在展开Optional值时意外发现nil(SpriteKit)

时间:2015-06-14 07:19:39

标签: ios iphone swift

我刚刚开始学习用iOS编写SpriteKit个游戏,我是编程新手(我之前只用Java和Swift编程)。我开始做我在网上找到的教程。我正试图添加一个" Game Over"场景,我一直收到错误

  

"线程1:EXC-BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)"

当我宣布gameOverLabel常数时。一旦球击中屏幕底部,它就会在运行时编译但崩溃,这应该会触发“游戏结束”。屏幕。

import SpriteKit

let gameOverLabelCategoryName = "gameOverLabel"

class GameOverScene: SKScene {
    var gameWon: Bool = false {

        didSet {
    let gameOverLabel = childNodeWithName(gameOverLabelCategoryName) as! SKLabelNode
            gameOverLabel.text = gameWon ? "Game Won" : "Game Over"
        }
}
    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
        if let view = view {
            let gameScene = GameScene.unarchiveFromFile("GameScene") as! GameScene
            view.presentScene(gameScene)
        }
    }
}

如果有人对我可以去了解SpriteKit,文章或视频的地方有任何建议,我会非常感激,因为我发现的大部分内容都是在Objective-C中,我在迅速的。

Here是我一直关注的教程..

2 个答案:

答案 0 :(得分:0)

看起来你在类的范围内声明你的gameOverLabelCategoryName常量 看起来有点奇怪,但应该没问题。它的范围将为 internal docs)。

第14行:&#34; if let view = view {&#34;您正在声明一个名为view的常量,它会屏蔽原始self.view实例。也许这可能会混淆编译器并导致内部崩溃?

答案 1 :(得分:0)

如果具有该名称的节点不存在,则 childNodeWithName将返回nil。你的代码没有检查这种可能性(as!假设它既不是nil也不是合适的类型)所以这会导致崩溃。

本教程要求您创建这个“游戏超级标签”&#39;节点并在创建此代码之前对其进行命名。检查您是否正确执行了该操作并且没有对其进行错误命名(例如,它区分大小写)。