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)
}
我正在编写一个辅助方法来显示 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)
}