【问题标题】:Spritekit node zRotation doesn't keep aspect ratio of node when child of another nodeSpritekit节点zRotation在另一个节点的子节点时不保持节点的纵横比
【发布时间】:2015-11-18 01:20:01
【问题描述】:

我正在构建一个游戏,我希望能够旋转一个节点。如果该节点的父节点是self(GameScene),我可以旋转非常好,但是如果我将该节点添加为另一个不具有相同width x height 比率的节点的子节点,它会失去它的纵横比.

我想我可以简单地找到场景比例并在更改父节点后将节点的宽度乘以它,这工作正常但是......当我旋转节点(zRotation)时,它会再次拉伸。最大拉伸是当节点旋转 90 度时,因为新的父节点是一个大于大于的矩形。

我想知道是否有一种方法可以在旋转和更改节点父节点(坐标系)时始终保持纵横比不变?

我只是将节点添加到 bigRectangle(GameScene 上的一个大矩形)。它看起来在矩形上被拉伸(如果我将它添加到 GameScene 则不会)所以我通过以下方式更改比率:

let myRatio = self.frame.height / self.frame.width
myNode.xScale = 1
myNode.yScale = 1 * myRatio

这可行,但是当节点旋转(zRotation)时,它会再次被拉伸......

我添加了图片;

【问题讨论】:

  • 你能解决这个问题吗?当 scale 和 zRotation 应用于每个节点时,我可以重现子节点(尤其是 2 级或更多)最终看起来非常奇怪。

标签: swift sprite-kit aspect-ratio coordinate-systems


【解决方案1】:

您必须在场景本身上进行配置:

scene.scaleMode = .AspectFill

【讨论】:

  • 我试过了,但这对我不起作用。放在场景中时的纵横比是完美的,旋转时不会改变。问题是当父节点是另一个与场景没有相同宽度/高度比的节点时,它会破坏该比例。我添加了一些图片。
  • 我以这种方式订购我的节点:我有一个 SKNode Objects 一个容器,并将 SKSpriteNodes 作为芯片添加到容器中。这对你来说可能吗?
  • 我想这是一种 hack,当您将节点放置在容器上时,可能具有相同的场景比例。这可能是最坏情况的解决方案。尽管如此,我还是想获得一个关于如何管理节点纵横比的真正解决方案,特别是如果我想动态更改父节点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
相关资源
最近更新 更多