循环遍历场景中的所有对象/精灵

时间:2014-11-22 18:21:45

标签: swift sprite-kit

当调用覆盖函数“didMoveToView”时,是否可以遍历场景中包含的所有对象?在上下文中,我正在尝试检查所有对象,看看其中一个对象是否具有名称“planet1”,然后围绕给定点进行轨道运行。

2 个答案:

答案 0 :(得分:7)

如果你需要遍历所有节点,只需使用

enumerateChildNodesWithName("//*", usingBlock: 
    { (node, stop) -> Void in  
        if node.name=="planet1" {
            //make it orbit
        }
    })
名称字符串//中的

表示搜索整个节点树,而不仅仅是此节点的子节点。
*是通配符并且匹配任何名称,您可以使用"xxx*"匹配任何以xxx开头的名称和"*xxx"相同的名称以匹配以xxx结尾的任何名称

编辑:你可以这样做:

planet1=self.childNodeWithName("//planet1")!

答案 1 :(得分:1)

只需遍历所有父视图的子视图。

override func didMoveToView(view: SKView) {
    super.didMoveToView(view)
    for sibling in view.subviews {
        // check sibling view
    }
}

请注意,循环中至少有一个对象将等于self。另请注意,他们都有AnyObject类型。所以你不得不贬低。如果您的视图命名为" planet1"虽然是一个特殊的课程:

for sibling in view.subviews {
    if let planet = sibling as? PlanetSprite {
        if planet.name == "planet1" {
            // do stuff
        }
    }
}

这可能与您正在寻找的内容有关。