尝试从父节点中删除节点时出错

时间:2015-10-07 20:26:56

标签: swift sprite-kit swift2

此代码位于if语句中,用于检查用户是否触摸了正确的按钮。如果未返回true,则以下代码将运行。问题是,当从父项中删除live时,行let live = childNodeWithName("liveBall") as! SKSpriteNode会返回此错误:

  

致命错误:在打开Optional时意外发现nil   值。

这必须是因为childNodeWithName("liveBall")不再存在。

override func didMoveToView(view: SKView) {
    let live = SKSpriteNode(texture: purpleTexture)
    live.position = CGPointMake(self.frame.size.width * 0.68, self.frame.size.height * 0.93)
    live4.name = "liveBall"
    self.addChild(live)
}

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    let live = childNodeWithName("liveBall") as! SKSpriteNode
    if(intersectsNode(live)){
        live.removeFromParent()
    }
}

如何避免此错误?

2 个答案:

答案 0 :(得分:0)

这意味着没有“liveBall”节点作为孩子。你确定它被添加了吗?似乎在:

中有一个拼写错误(编号4)
live4.name = "liveBall"

您可以尝试添加以下节点:

var mySprite: SKSpriteNode = childNodeWithName("mySprite") as SKSpriteNode

答案 1 :(得分:0)

要为调用RemoveFromParent()的函数添加安全性,只需添加一个新的布尔变量,在调用RemoveFromParent()时将其自身更改为true,并使用条件检查来防止它发生两次。