我正在编写一个帮助方法来显示iOS上SpriteKit应用程序中所有物理交互(碰撞和联系人)的摘要。
我有一个简单的场景,边界(来自self.physicsBody = SKPhysicsBody(edgeLoopFromRect: frame)
)和3个简单的形状(2个正方形和一个圆圈)通过addChild()
在我的辅助函数中,我想搜索所有节点,如果它们有物理实体,则打印它们的类别,碰撞和contactTest位掩码。
如果我编码以下内容:
enumerateChildNodesWithNeme("*") { node, _ in {
print("Node: \(node.name)")
}
然后我只列出了3个形状:
Node: Optional("shape_blueSquare")
Node: Optional("shape_redCircle")
Node: Optional("shape_purpleSquare")
我的场景的物理实体不会被退回。但如果我使用:
enumerateChildNodesWithNeme("..") { node, _ in {
print("Node: \(node.name)")
}
然后我得到:
Node: Optional("shape_edge")
如果我使用:
enumerateChildNodesWithNeme("..//") { node, _ in {
print("Node: \(node.name)")
}
我什么也没得到,而我认为这会将节点树向上移动到场景,然后以递归方式返回所有孩子。搜索参数"//*"
也只返回3个孩子。
skView.showNodecount = true
显示的节点数始终为4
。
所以我的问题是:是否存在enumerateChildNodesWithName的搜索参数,它将返回场景中的所有节点(包括场景本身)或者我误解了场景与其子节点之间的关系,因为单个搜索无法搜索都?它可能是后者,因为print("\(parent.children)")
返回nil
,当我期望看到self
或其他变体时。{/ p>
答案 0 :(得分:2)
这对我有用:
enumerateChildNodesWithName("//.") { (node, _) -> Void in
print("Node: \(node.name)")
}
关于//
:
当放置在搜索字符串的开头时,这指定了 搜索应该从根节点开始并以递归方式执行 遍及整个节点树。
关于.
:
指当前节点。
这也可能对你有用(如果你想找到给定矩形内的所有物理实体):
self.physicsWorld.enumerateBodiesInRect(frame) { (body, _) -> Void in
print(body.node?.name)
}