我正在写一个帮助器方法来显示iOS上的SpriteKit应用程序中的所有物理交互(碰撞和联系人)的摘要。iOS enumerateChildNodeswithName访问所有物理实体
我有一个简单的场景,与边界(由self.physicsBody = SKPhysicsBody(edgeLoopFromRect: frame)
)和3种简单的形状(2个正方形和圆形)至极通过addChild()
被添加到场景在我的帮助功能,我想搜索所有节点,如果他们有一个physicsBody,打印他们的类别,collision和contactTest位掩码。
如果我的代码如下:
enumerateChildNodesWithNeme("*") { node, _ in {
print("Node: \(node.name)")
}
然后我只得到了3个形状上市:未返回
Node: Optional("shape_blueSquare")
Node: Optional("shape_redCircle")
Node: Optional("shape_purpleSquare")
我的场景的physicsBody。但是,如果使用:
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
或这样的一些变化。
如果是这样的方式,它的作品,我的代码,会发现所有除了场景的物理体之外的其他物理机构,那很好 - 我可以单独处理。我只是想确保我不会错过任何其他的东西。 –
打印类似于print(“\(parent.children)”)的结果总是以nil结尾。我假设在这里,隐式自我是一个'GameScene'或类似的东西。你得到零,因为([根据文档](https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKScene_Ref/)),场景是一个根节点,所以它可以'没有父母。例如,你不能从父窗口中删除场景(当self是当前场景时,'self.parent'属性总是'nil'),因此'self.removeFromParent()'没有效果。 – Whirlwind
@Whirlwind - 有道理 - 谢谢。 –