我正在尝试开发一款基础游戏,我的场景有多个子节点添加到根节点。每个节点都有两个名称中的一个,分别为
如果用户触摸了其中一个
我尝试过很多方法,但好像什么都没起作用。
在我的
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和Scene Kit中,我该如何获取所有特定名称的子节点?
调用中有额外的参数'using'
。 - maxshutyenumerateChildNodes(withName:)
应该可以工作,这里有一个例子:https://stackoverflow.com/a/26748966/1187415 - Martin RSCNNode
实例) 而不是 SpriteKit; 两者通常有重叠之处,但似乎enumerateChildNodes(withName:using:)
方法对于SCNNode
并不存在。对于后者,可能可以使用childNodes(passingTest:)
,或者只需在childNodes
属性上调用filter
;尽管我不确定这些是否对于多子层次结构(节点层次深度 > 1)是等效的。 - dfrib