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

时间:2014-02-18 21:08:30

标签: ios sprite-kit coordinate-systems

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

2 个答案:

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