基本的なゲームを開発しようとしていますが、ルートノードにいくつかの子ノードが追加されたシーンがあります。各ノードには、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)で特定の名前のすべての子ノードを取得するにはどうすればよいですか?
一致する名前のノードを除外し、親ノードから削除します。
gameScene.rootNode.childNodes.filter({ $0.name == "Enemy" }).forEach({ $0.removeFromParentNode() })