0

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

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

SKAction.scaleXTo(-1, duration: duration)

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

我必须提到我有

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

2 回答 2

1

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

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

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

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

于 2016-07-08T16:02:28.353 回答
0

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

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

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

就像现在一样

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

它应该是

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

在此处输入图像描述

于 2016-07-07T20:17:56.177 回答