web-dev-qa-db-ja.com

Swift with Scene Kit)の名前を持つすべての子ノードを取得する方法

基本的なゲームを開発しようとしていますが、ルートノードにいくつかの子ノードが追加されたシーンがあります。各ノードには、friendまたはenemyの2つの名前のいずれかがあります。

ユーザーが削除したいenemyノードの1つに触れた場合、allenemyという名前の子ノード。

私はいくつかのことを試しましたが、何も機能しないようです。

私の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)で特定の名前のすべての子ノードを取得するにはどうすればよいですか?

9
maxshuty

一致する名前のノードを除外し、親ノードから削除します。

gameScene.rootNode.childNodes.filter({ $0.name == "Enemy" }).forEach({ $0.removeFromParentNode() })
9
Oskar