我们希望遍历节点的祖先,直到找到具有特定类的父级。
SpriteKit允许您使用children
属性迭代子级,但parent
属性仅保存直接父级 - 而不是父级数组。我们如何遍历节点的所有祖先?
答案 0 :(得分:3)
我不知道一个允许你上层次结构的函数,类似于enumerateChildNodes函数允许你沿着层次结构前进。也许这个递归函数可能会有所帮助。下面我将recursion设置为在没有父级时或者父级是SKScene类时结束。您可能需要对其进行调整,以便在找到特定类时递归结束。
func parentNodesOf(_ node: SKNode) -> [SKNode]
{
if let parentNode = node.parent
{
if parentNode is SKScene
{
return []
}
else
{
return [parentNode] + parentNodesOf(parentNode)
}
}
else
{
return []
}
}
希望这有帮助!
答案 1 :(得分:0)
JohnV回答的替代方案
extension SKNode {
func forEachAncestor(_ closure: (_ ancestor: SKNode) -> Void) {
var currentParent: SKNode? = self.parent
while currentParent != nil {
closure(currentParent!)
currentParent = currentParent!.parent
}
}
}