当调用覆盖函数“didMoveToView”时,是否可以遍历场景中包含的所有对象?在上下文中,我正在尝试检查所有对象,看看其中一个对象是否具有名称“planet1”,然后围绕给定点进行轨道运行。
答案 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
}
}
}
这可能与您正在寻找的内容有关。