SKSpriteKit删除存储在数组

时间:2016-01-29 23:08:04

标签: swift skspritenode

所以我有一个数组,在游戏中保存对我所有瓷砖的引用,并且在点击时我想循环并销毁彼此相邻的任何瓷砖。我已经有了一个函数来检查相邻的tile并存储应该在我的checkedTiles Bools数组中删除哪些。然后我想循环遍历这个数组并从我的块数组中删除任何节点(其中包含对tile的引用),其中checkedTiles为true。我认为这会有效但块[col] [row] .removeFromParent()实际上并没有删除节点。有任何想法/建议来完成这个?任何帮助将不胜感激。谢谢!

- 块和checkedTiles在程序的其他位置初始化。

var blocks: Array<Array<SKSpriteNode>> = []
var checkedTiles: Array<Array<Bool>> = []

for col in 0..<numCols {
    for row in 0..<numRows {
        if checkedTiles[col][row] == true {
            print("removing tile")
            blocks[col][row].removeFromParent()
            checkedTiles[col][row] = false

        }
    }
}

1 个答案:

答案 0 :(得分:0)

这是一个可行的示例,您只需复制并粘贴它即可查看其工作原理。这就是你应该怎么做的。我怀疑问题出在你的checkedTiles变量上。在使用它之前尝试将其打印出来,看看那里是否一切正常。

class GameScene: SKScene {

    override func didMoveToView(view: SKView) {

        var blocks: [[SKSpriteNode]] = []

        //make a 3x3 matrix of SKSpriteNodes
        for  i in 0..<3 {

            var row = [SKSpriteNode]()

            for  j in 0..<3 {

                let node = SKSpriteNode(color: .purpleColor(), size: CGSize(width: 20, height: 20))
                node.position = CGPoint(x: frame.midX + CGFloat(i * 30 ), y: frame.midY - CGFloat(j * 30 ))
                row.append(node)
                addChild(node)
            }
            blocks.append(row)
        }

        //Just remove the tile placed in the middle of the all tiles

        var checkedTiles: [[Bool]] = [
            [false,false, false],
            [false, true, false],
            [false, false, false]
        ]

        print(checkedTiles)

        for col in 0..<3 {
            for row in 0..<3 {
                if checkedTiles[col][row] == true {
                    print("removing tile")
                    blocks[col][row].removeFromParent()
                    checkedTiles[col][row] = false   
                }
            }
        }
        print(checkedTiles)
    }
}