如何将一个 SpriteNode 的坐标转换为另一个不是子节点或后代节点的坐标

问题描述

在我的 SpriteKit 场景中,我进行了以下设置:

多个名为 sourceNode 的节点是场景的直接子节点。 名为 targetNode 的节点是另一个名为 sectionNode 的节点的子节点,sectionNode 也是 scene 的子节点。

self --> sourceNode

self --> sectionNode --> targetNode

当使用 touchesMoved 方法移动 sourceNode 时,我将 positionsourceNode 设置为触摸的当前位置。一旦触摸位置高于 targetNode,我想通过匹配它们的位置将 sourceNode 对齐到 targetNode

我的问题:

我似乎无法在两个坐标空间之间正确转换。我尝试了 convert(_:from:)convert(_:to:) 的不同变体,但都不起作用。我知道 convert 期望两个节点都在同一个节点树中,但由于它们都是场景的后代,所以它们不应该被视为同一节点树的一部分吗?

(如果 sourceNodetargetNode 与兄弟姐妹在同一个坐标系中,代码只需将 targetNode 的位置分配给 {{1} })

sourceNode

解决方法

要将 sourceNode 移动/捕捉到 targetNode 的坐标,您可以执行以下操作:

sourceNode.move(toParent: sectionNode)
sourceNode.position = targetNode.position
sourceNode.move(toParent: scene)