eption 'NSInvalidArgumentException', reason: 'Attemped to add a SKNode 已经有一个父级



我想不通这个问题。我删除了某个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)
                }

            }
        }
    }

感谢你的帮助!

我建议您不要使用SKAction.removeFromParent,而是通过调用来删除节点本身

tileNodeArray[i].removeFromParent()

而不是:

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

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

相关内容

最新更新