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

时间:2016-07-07 20:03:07

标签: swift sprite-kit skaction anchorpoint

我有一个父SKSpriteNode,它包含许多子SKShapeNodes,SKSpriteNodes和SKLabelNodes,这些子排列在相对于父母的特定X,Y位置。

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

SKAction.scaleXTo(-1, duration: duration)

它会翻转包含子项(我想要的)的父项,但所有子节点的水平对齐都是随机的。

我必须提到我有

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

2 个答案:

答案 0 :(得分:1)

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

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

与精灵相同的规则。在进行负刻度时,您必须添加宽度,然后在返回正刻度时删除宽度

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

答案 1 :(得分:0)

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

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

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

现在是

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

应该是

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

enter image description here