【发布时间】:2016-04-06 07:57:53
【问题描述】:
我正在编写一个辅助方法来显示 iOS 上 SpriteKit 应用中所有物理交互(碰撞和接触)的摘要。
我有一个简单的场景,有一个边界(来自 self.physicsBody = SKPhysicsBody(edgeLoopFromRect: frame))和 3 个简单的形状(2 个正方形和一个圆形),它们通过 addChild() 添加到场景中
在我的辅助函数中,我想搜索所有节点,如果它们有物理体,打印它们的类别、碰撞和接触测试位掩码。
如果我编写以下代码:
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或类似的东西。你得到了 nil,因为 (according to the docs),场景是根节点,所以它不能有父节点。例如,您不能从其父场景中删除场景(self.parent属性始终为nil,当 self 是当前场景时)因此类似self.removeFromParent()的内容无效。 -
@Whirlwind - 有道理 - 谢谢。
-
不客气。您是否尝试过我发布的代码作为答案?对你有用吗?
-
我做到了,它做到了——只是标记了你的答案——谢谢。
标签: ios sprite-kit skspritenode skscene