Как получить все дочерние узлы с именем в Swift с Scene Kit

Я пытаюсь разработать базовую игру, и у меня есть сцена с несколькими дочерними узлами, добавленными в корневой узел. Каждый узел имеет одно из двух имен, либо friend или enemy.

если пользователь касается одной из enemy узлы, которые я хочу удалить все дочерние узлы с именем enemy.

Я пробовал несколько вещей, но, похоже, ничего не получается.

в своем touchesBegan функция:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
   let touch = touches.first!
   let location = touch.location(in: gameView)
   let hitList = gameView.hitTest(location, options: nil)

   if let hitObject = hitList.first {
      let node = hitObject.node

      //This doesn't work
      gameScene.rootNode.childNodes(passingTest: { (node, UnsafeMutablePointer<ObjCBool>) -> Bool in 
      node.removeFromParentNode()
   } 
}

Я также пытался использовать gameScene.rootNode.enumerateChildNodes(withName:) но я не могу заставить это работать.

Что Я can получить работу, если я сделаю что-то подобное там вместо этого:

if node.name == "enemy" {
    node.removeFromParentNode()
}

однако это удалит только один узел, который был поражен, а не все из них. Как я могу получить все дочерние узлы с определенным именем в Swift с помощью Scene Kit?

1 ответов


отфильтруйте узлы с соответствующим именем и удалите их из родительского узла:

gameScene.rootNode.childNodes.filter({ .name == "Enemy" }).forEach({ .removeFromParentNode() })