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

8
我在另一个节点上添加了一个子节点,我想获取子节点相对于视图坐标而非父节点坐标的位置。
2个回答

19

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


4

如果您所说的“视图坐标”是场景坐标,那么请查看我使用的此Swift解决方案:

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属性一样,因为该节点可能尚未添加到场景中。在这种情况下,您将得到nil值。您甚至可以反向过程并添加一个setter,以便无论节点有多深,都可以将其放置在场景坐标中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接