iOS spriteKit子节点相对于视图坐标的位置

我有一个子节点添加到另一个节点。 我想让子节点相对于视图坐标而不是父节点坐标

获取子节点相对于其父节点的position ,然后使用convertPoint:fromNode:convertPoint:toNode:方法将父节点的坐标系转换为场景的坐标系。 (请记住, SKSceneinheritance自SKNode并且是节点层次结构的根,因此您可以将其与这些方法中的任何一个一起使用。)如果您需要在UIKit视图坐标空间中工作,请使用场景的convertPointToView:方法。

如果通过’视图坐标’表示场景坐标,那么请查看我使用的这个快速解决方案:

 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,这样您就可以将每个节点放置在场景坐标中,无论它埋藏多深。