启动模拟器后,xcode sprite游戏错误EXC_BAD_INSTRUCKION(代码= EXC_1386,子代码= 0x0)

时间:2016-02-12 01:18:12

标签: xcode

您好我正在关注我的Xcode游戏教程。当我运行模拟器时它成功启动但是一旦我点击查看下一页就会崩溃。然后弹出错误 GameScene.swift

override func didMoveToView(view: SKView) {
        /* Setup your scene here */
         cannon = self.childNodeWithName("cannon") as! SKSpriteNode

正上方是我有错误的部分。来自

cannon = self.childNodeWithName("cannon") as! SKSpriteNode

,错误显示如下

thread1:EXC_BAD_INSTRUCKION(code=EXC_1386, subcode=0x0)

这是我的代码

导入SpriteKit

class GameScene: SKScene {
    var cannon: SKSpriteNode!
    var touchLocation:CGPoint = CGPointZero


    **override func didMoveToView(view: SKView) {
        /* Setup your scene here */
         cannon = self.childNodeWithName("cannon") as! SKSpriteNode**

    }


    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
       /* Called when a touch begins */
        touchLocation = touches.first!.locationInNode(self)
    }

    override func touchesMoved(touches: Set<UITouch>, withEvent event: UIEvent?) {
        touchLocation = touches.first!.locationInNode(self)

    }

    override func update(currentTime: CFTimeInterval) {
        /* Called before each frame is rendered */
         let percent = touchLocation.x / size.width
         let newAngle = percent * 180 - 180
         cannon.zRotation = CGFloat(newAngle) * CGFloat(M_PI); 180.0

请告诉我这里有什么问题。很沮丧。感谢

2 个答案:

答案 0 :(得分:0)

我刚刚在一个新项目中测试了你的代码,如果childNodeWithName是正确的,它就可以工作。我认为你已经在GameScene.sks中创建了大炮,现在正试图在代码中引用它。

如果.sks文件中的精灵被调用&#34; cannon&#34;它工作正常,但是如果我把它改成其他东西我也会崩溃。

简而言之,你的大炮精灵名称不是&#34;加农炮&#34;所以某处必须有拼写错误。

答案 1 :(得分:0)

不知道你是否已经解决了这个问题,但我正在观看相同的教程并发现同样的问题。

问题在于cannon节点如何成为cannon_full节点的父级。 self.childNodeWithName("cannon")不会查看嵌套对象。

要解决此问题,请将cannon精灵节点放入SKScene,或者使用self.childNodeWithName("cannon_full")?.self.childNodeWithName("cannon")找到它,其中cannon_full是父名称。两者都是有效的方法,尽管第二种方法会在这种特定情况下引起定位问题。