SpriteKit:如何遍历节点的祖先?

时间:2017-04-18 07:08:46

标签: ios sprite-kit skspritenode sknode

我们希望遍历节点的祖先,直到找到具有特定类的父级。

SpriteKit允许您使用children属性迭代子级,但parent属性仅保存直接父级 - 而不是父级数组。我们如何遍历节点的所有祖先?

2 个答案:

答案 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
        }
    }
}