我正在尝试开发基本游戏,并且我有一个场景,其中有几个子节点添加到根节点。每个节点都有两个名称之一,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:)
,但我也无法使用。
我可以开始工作的是我在那里做了类似的事情:
if node.name == "enemy" {
node.removeFromParentNode()
}
但是,这只会删除被击中的单个节点,而不是所有节点。如何在Swift with Scene Kit中获取具有特定名称的所有子节点?
答案 0 :(得分:8)
过滤掉具有匹配名称的节点,并将其从父节点中删除:
gameScene.rootNode.childNodes.filter({ $0.name == "Enemy" }).forEach({ $0.removeFromParentNode() })