Swift SpriteKit:翻转父精灵随机子节点水平对齐

Posted

技术标签:

【中文标题】Swift SpriteKit:翻转父精灵随机子节点水平对齐【英文标题】:Swift SpriteKit: Flipping parent sprite randomizes child nodes horizontal alignment 【发布时间】:2016-07-07 20:03:07 【问题描述】:

我有一个父 SKSpriteNode,其中包含许多子 SKShapeNode、SKSpriteNode 和 SKLabelNode,它们相对于父级排列在特定的 X、Y 位置。

当我通过对其运行 SKAction 来翻转父级时:

SKAction.scaleXTo(-1, duration: duration)

它翻转包括子节点(我想要的)的父节点,但所有子节点的水平对齐方式是随机的。

我必须提到我有

parent.anchorPoint = CGPoint(x: 0,y: 0)

【问题讨论】:

【参考方案1】:

发生这种情况的原因是您的锚点。缩放(以及所有转换)发生在这一点上。为了测试,拿一张纸,把铅笔放在左上角,然后试着把右边移到左边。把铅笔留在原处。您会注意到右侧现在是 - 纸张宽度

在这种情况下,您需要做的是重新添加宽度以使纸张保持在同一位置。

与精灵相同的规则。你必须在做负比例时添加宽度,然后在返回正比例时删除宽度

(或者只是把你的锚放在中间)

【讨论】:

将锚设置为 0.5,0.5 无济于事 那么你需要更好地定义真正搞砸了【参考方案2】:

应用于节点的几何变换会自动应用于其后代。

这就是为什么当您移动/旋转/缩放节点时,子节点(和孙子节点...)也会更新。

如果您想在不涉及其他节点的情况下对精灵应用变换,只需更改场景的结构,移动精灵的子项,如下所示。

现在的样子

在这张图片中,绿色圆圈是你的精灵。在左侧场景中,当您更改绿色节点时,它的子节点会相应更新。而你不希望这样。

应该如此

所以转到正确的场景。创建一个新的 SKNode(橙色的)并将其放置如下所示。 现在绿色节点没有子节点,因此您可以对其应用几何变换而不会产生任何副作用。

【讨论】:

但我也想让孩子们翻转。只是不要让他们弄乱他们的水平位置

以上是关于Swift SpriteKit:翻转父精灵随机子节点水平对齐的主要内容,如果未能解决你的问题,请参考以下文章

Xcode Swift 3 / SpriteKit:点击精灵

Swift - SpriteKit:如果添加不同的“addchild”父母,使精灵相互反应

Swift SpriteKit - 防止精灵节点角旋转

(Swift SpriteKit) 沿触摸方向旋转精灵

SpriteKit Swift动画一次只能在一个精灵上 - iOS

iOS7 SpriteKit 如何对两个或多个精灵节点子节点的动画进行分组?