0

我在 Xcode 6 中多次遇到过这个问题。问题是我有一个球在跑,当他击中一个障碍时,他就死了。不过他可以跳。但是第一个块总是崩溃。就像我只是像不在空中一样正常滚动并击中第一个方块,它就会冻结并关闭。

它给了我这个错误:

线程 1:EXC_BAD_INSTRUCTION(代码=EXC_1386_INVOP,子代码=0x0)

第 2 行和第 7 行有绿色背景(计算空格)。

这是错误行:

func didBeginContact(contact:SKPhysicsContact) {
    died()
}

func died() {
    if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene { 
        let skView = self.view as SKView                                                                
        skView.ignoresSiblingOrder = true
        scene.size = skView.bounds.size
        scene.scaleMode = .AspectFill
        skView.presentScene(scene)
    }
}
4

3 回答 3

2

EXC_BAD_INSTRUCTION 暗示您的代码中某处有一个断言。您提供的唯一可以抛出断言的代码行是:

let skView = self.view as SKView

如果 self.view 不能转换为 SKView,它将断言。似乎 self.view 实际上不是 SKView。

可以肯定的是,您可以像使用场景一样进行可选演员:

if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
    if let skView = self.view as? SKView {                                                          
        skView.ignoresSiblingOrder = true
        scene.size = skView.bounds.size
        scene.scaleMode = .AspectFill
        skView.presentScene(scene)
    }
}
于 2014-07-24T23:24:36.463 回答
0
if let skView = self.view as? SKView! {                                                          
    skView.ignoresSiblingOrder = true
    scene.size = skView.bounds.size
    scene.scaleMode = .AspectFill
    skView.presentScene(scene)
}

应该管用

于 2014-12-16T05:35:50.143 回答
0

我相信我已经找到了解决您问题的方法。

更改let skView = self.view as SKView

if let skView = self.view as SKView!
于 2014-08-27T15:13:55.720 回答