iOS 枚举 ChildNode withName 以访问所有物理体

iOS enumerateChildNodeswithName to access ALL physics bodies

我正在编写一个辅助方法来显示 iOS 上 SpriteKit 应用程序中所有物理交互(碰撞和接触)的摘要。

我有一个简单的场景,有一个边界(来自 self.physicsBody = SKPhysicsBody(edgeLoopFromRect: frame))和 3 个简单的形状(2 个正方形和一个圆形),它们是通过 addChild()

添加到场景中的

在我的辅助函数中,我想搜索所有节点,如果它们有 physicsBody,则打印它们的类别、碰撞和接触测试位掩码。

如果我编写以下代码:

enumerateChildNodesWithNeme("*") { node, _ in {
   print("Node: \(node.name)")
}

然后我只得到列出的 3 个形状:

Node: Optional("shape_blueSquare")
Node: Optional("shape_redCircle")
Node: Optional("shape_purpleSquare")

我场景的 physicsBody 没有 returned。但是如果我使用:

enumerateChildNodesWithNeme("..") { node, _ in {
   print("Node: \(node.name)")
}

然后我得到:

Node: Optional("shape_edge") 

如果我使用:

enumerateChildNodesWithNeme("..//") { node, _ in {
   print("Node: \(node.name)")
}

我什么也没得到,而我认为这会将节点树向上移动到场景,然后递归 return 所有 children。搜索参数 "//*" 也 return 只是 3 children.

一直以来,skView.showNodecount = true显示的节点数是4

所以我的问题是:是否有 enumerateChildNodesWithName 的搜索参数将 return 场景中的所有节点(包括场景本身)或者我是否误解了场景与场景之间的关系 children,因为单个搜索不能同时搜索两者?可能是后者,如 print("\(parent.children)") returns nil,当我期待看到 self 或类似的变体时。

这对我有用:

enumerateChildNodesWithName("//.") { (node, _) -> Void in
     print("Node: \(node.name)")
}

关于 // :

When placed at the start of the search string, this specifies that the search should begin at the root node and be performed recursively across the entire node tree.

关于.

Refers to the current node.

这也可能对你有用(如果你想找到给定矩形内的所有物理物体):

self.physicsWorld.enumerateBodiesInRect(frame) { (body, _) -> Void in
    print(body.node?.name)
}