您好我正在关注我的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
请告诉我这里有什么问题。很沮丧。感谢
答案 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
是父名称。两者都是有效的方法,尽管第二种方法会在这种特定情况下引起定位问题。