eption'NSInvalidArgumentException',原因:'尝试添加已有父级的SKNode

时间:2015-02-19 09:30:56

标签: swift sprite-kit

我无法弄清楚这个问题。我删除某个SpriteNode,而不是在某个条件下重新添加它,但每次调用addChild()时它都会崩溃。我知道SpriteNode只能有一个父级,所以我不明白这一点。以下是相关代码:

override func touchesBegan(touches: NSSet, withEvent event:UIEvent) {
        var touch: UITouch = touches.anyObject() as UITouch
        var location = touch.locationInNode(self)
        var node = self.nodeAtPoint(location)


        for var i=0; i < tileNodeArray.count; i++
        {
            if (node == tileNodeArray[i]) {
                flippedTilesCount++;
                flippedTilesArray.append(tileNodeArray[i])
                let removeAction = SKAction.removeFromParent()
                tileNodeArray[i].runAction(removeAction)

                if flippedTilesCount == 2
                {
                    var helperNode1 = newMemoLabelNode("first",x: 0,y: 0,aka: "first")
                    var helperNode2 = newMemoLabelNode("second",x: 0,y: 0,aka: "second")

                    for var k = 0; k < labelNodeArray.count ;k++
                    {
                        if labelNodeArray[k].position == flippedTilesArray[0].position
                        {
                            helperNode1 = labelNodeArray[k]
                        }
                        if labelNodeArray[k].position == flippedTilesArray[1].position
                        {
                            helperNode2 = labelNodeArray[k]
                        }
                    }
                    if helperNode1.name == helperNode2.name
                    {
                        erasedTiles = erasedTiles + 2;
                    }
                    else
                    {
                        for var j = 0; j < flippedTilesArray.count ;j++
                        {
                            let waitAction = SKAction.waitForDuration(1.0)
                            flippedTilesArray[j].runAction(waitAction)
                            //self.addChild(flippedTilesArray[j]);
                        }
                    }

                    flippedTilesCount = 0;
                    flippedTilesArray = []
                    println("erased tiles:")
                    println(erasedTiles)
                }


            }
        }
    }

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我建议您不要使用SKAction.removeFromParent,而是通过调用:

删除节点本身
tileNodeArray[i].removeFromParent()

而不是:

let removeAction = SKAction.removeFromParent()
tileNodeArray[i].runAction(removeAction)

问题可能是,SKActions不会等待彼此完成。例如,如果您调用waitAction,则其他操作将继续运行。