找到旋转的 SKSpriteNode 的精确帧

Posted

技术标签:

【中文标题】找到旋转的 SKSpriteNode 的精确帧【英文标题】:Find the Exact Frame of a rotated SKSpriteNode 【发布时间】:2017-12-01 21:55:51 【问题描述】:

我真的很想知道如果旋转了SKSpriteNode,如何找到它的精确框架。目前,SKSpriteNode 的框架如下所示:

这个框架是rect.frame

但是,由于其zRotation,此框架包含大量空白空间。我不想要这个空白空间,而是想要恰好是SKSpriteNode 的框架。 这就是我想要的:

我怎样才能做到这一点?如果您知道如何找到SKSpriteNode 的这个“精确”框架,我真的很想知道。请使用 SWIFT

谢谢

【问题讨论】:

你没有,CGRect是x y宽高,不是x1 y1 x2 y2 【参考方案1】:

这是可以做到的。

在你的精灵左下角放置一个你知道确切大小的虚拟节点。可能使用一个完美的正方形。将它的左下角锚定到你父母的左下角。父级是您想要确切大小定义的那个。

从那里,有两种方法:

    将虚拟精灵缩放到您感兴趣的精灵大小,并使用这些测量值来确定精灵在任何时间点的位置和大小。

    在父对象的右上角放置另一个虚拟精灵。在这种情况下,您可以使用两个虚拟对象的中点,而无需完美地使用它们的边缘。现在您可以随时找到这两个假人的位置,并以世界空间单位计算精灵的大小/形状/轮廓。


这里是动画方式 1

【讨论】:

好主意。 2 听起来更容易,我建议:不要使用虚拟精灵,而是使用 SKNodes(有位置但没有内容)并使它们成为目标 Sprite 的子节点,以分别将它们限制在左下角和右上角。 @Confused 我只是不明白它是如何工作的 - 虚拟精灵本身将有一个 accumulatedFrame,它只是围绕旋转的虚拟模型的另一个未旋转框架。 哪一个? @蒂姆 @Confused 哪个什么?我根本不明白你怎么能得到任何框架不是问题中所示标准正方形的精灵。 @Tim 建议使用两种不同的方法。可能还有很多其他人。您在哪个部分苦苦挣扎,尤其是您在尝试做的哪些事情在使用这种方法时不起作用?

以上是关于找到旋转的 SKSpriteNode 的精确帧的主要内容,如果未能解决你的问题,请参考以下文章

如何让 SKSpriteNode 不旋转纹理

如何围绕节点的 Y 轴旋转 SKSpriteNode?

在节点的右边缘而不是在中心旋转 SKSpriteNode

旋转后的 UIScrollViews 帧

3dsmax如何让动画中物体角度的旋转大于360度?也就是能转很多圈?

使用 OpenGL 的视频帧旋转