2017-12-31 39 views
8

基本的なゲームを開発しようとしています。ルートノードに複数の子ノードが追加されたシーンがあります。各ノードには、friendまたはenemyのいずれかの名前のいずれかがあります。シーンキットでSwiftで名前を持つすべての子ノードを取得する方法

ユーザーは、私がenemy命名されているすべての子ノードを削除するenemyノードの1つを触れた場合。

私はいくつかのことを試しましたが、何も動作していないようです。私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:)を使用しようとしましたが、私はどちらか働いていることを得ることができません。

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

は、しかし、これが唯一のシングルヒットされたノードではなく、それらのすべてを削除します:私はそこの代わりにこのような何かを行う場合、私は作業を取得することができますどのような

です。 Swift with Scene Kitで特定の名前の子ノードをすべて取得するにはどうすればよいですか?

+0

enumerateChildNodes(withName: "敵"、使用:{ ノード、_}) –

+0

この@ElTomatoは私を与えます'呼び出し中'のエラー「余分な引数」 – maxshuty

+0

'enumerateChildNodes(withName:)'が動作するはずです。https://stackoverflow.com/a/26748966/1187415 –

答えて

3

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

gameScene.rootNode.childNodes.filter({ $0.name == "Enemy" }).forEach({ $0.removeFromParentNode() }) 
関連する問題