当您在 SKSpriteNode 上使用 SKAction 时,哪个位置值会发生变化?我将如何解释头寸变化?

Which position value changes when you use an SKAction on an SKSpriteNode? And how would I account for the position changes?

我正在尝试使用 SKAction 来移动我的精灵。然而,我注意到在移动精灵之后,它们的位置值仍然保持不变。通过一些研究,我了解到(如果我错了请纠正我)精灵的位置值实际上是它们相对于父视图的位置,并且实际上发生变化的是父视图的位置值,而不是精灵' .只有当我检查时,父视图的位置值也没有改变。

那么实际改变的是哪个位置值??在访问精灵的位置值时,我将如何考虑位置的变化? (因为我游戏的很多逻辑都取决于它们的位置值)

这是我的代码:

let fall = SKAction.moveBy(x: 0, y: -85, duration: 0.2)

print("Original position \(gift.position)")
gift.run(fall)
print("New position \(gift.position)") // Both print the same value

如有任何帮助,我们将不胜感激!

您的gift.run(fall)正在安排一个将在 0.2 秒内发生的动作,而不是等待它完成。在 60 frames/second,这意味着精灵将在 12 帧后到达其最终位置。如果您在 update(_:) 中的每一步打印礼物的位置,您会发现它确实在变化。

由于 run 没有等待动作完成,因此在执行第二个 print 时精灵根本没有机会移动。

如果您希望某事仅在某个动作完成后发生,您有多种可能性。一种常见的方法是添加一个完成块;请参阅 Apple 关于操作入门的文档:https://developer.apple.com/documentation/spritekit/getting_started_with_actions。或者,如果您希望同一个节点按顺序执行多项操作,您可以创建一个复合 SKAction,就像 sequencerepeat 初始值设定项一样。