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”父母,使精灵相互反应