如何在Swift中使用Scene Kit获取名称中的所有子节点

时间:2017-12-31 01:01:32

标签: swift scenekit

我正在尝试开发基本游戏,并且我有一个场景,其中有几个子节点添加到根节点。每个节点都有两个名称之一,friendenemy

如果用户触摸其中一个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:),但我也无法使用。

可以开始工作的是我在那里做了类似的事情:

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

但是,这只会删除被击中的单个节点,而不是所有节点。如何在Swift with Scene Kit中获取具有特定名称的所有子节点?

1 个答案:

答案 0 :(得分:8)

过滤掉具有匹配名称的节点,并将其从父节点中删除:

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