我有一个子节点添加到另一个节点。我想让子节点相对于视图坐标而不是父节点坐标
答案 0 :(得分:17)
获取子节点相对于其父节点的position
,然后使用convertPoint:fromNode:
或convertPoint:toNode:
方法将父节点的坐标系转换为场景的坐标系。 (请记住,SKScene
继承自SKNode
并且是节点层次结构的根,因此您可以将其与这些方法中的任何一个一起使用。)如果您需要在UIKit视图坐标空间中工作,请使用场景的convertPointToView:
方法。
答案 1 :(得分:2)
如果通过'视图坐标'表示场景坐标,那么请查看我使用的这个快速解决方案:
extension SKNode {
var positionInScene:CGPoint? {
if let scene = scene, let parent = parent {
return parent.convert(position, to:scene)
} else {
return nil
}
}
}
然后你可以像获得常规位置一样获得场景位置。这是一个例子:
let positionInParent = childNode.position
let positionInScene = childNode.positionInScene? //optional return type
请注意,positionInScene属性是可选的,原因与SKNode的scene属性是可选的相同,该节点可能未添加到场景中。在这种情况下,你得到零。您甚至可以反转该过程并添加一个setter,这样您就可以将每个节点放置在场景坐标中,无论它埋藏的深度如何。