所以我有一个数组,在游戏中保存对我所有瓷砖的引用,并且在点击时我想循环并销毁彼此相邻的任何瓷砖。我已经有了一个函数来检查相邻的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
}
}
}
答案 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)
}
}