iOS enumerateChildNodeswithName可访问所有物理实体

时间:2016-04-06 07:57:53

标签: ios sprite-kit skspritenode skscene

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

1 个答案:

答案 0 :(得分:2)

这对我有用:

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

关于//

  

当放置在搜索字符串的开头时,这指定了   搜索应该从根节点开始并以递归方式执行   遍及整个节点树。

关于.

  

指当前节点。

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

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