Как получить все дочерние узлы с именем в 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() })