【问题标题】:Which position value changes when you use an SKAction on an SKSpriteNode? And how would I account for the position changes?当您在 SKSpriteNode 上使用 SKAction 时,哪个位置值会发生变化?我将如何解释职位变化?
【发布时间】:2021-04-04 21:03:46
【问题描述】:

我正在尝试使用 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

任何帮助将不胜感激!

【问题讨论】:

  • 您需要显示更多详细信息,例如创建操作并运行它们的实际代码。移动动作将改变运行它们的节点的位置,并且该位置相对于节点的父节点(如果这些节点位于顶层,则可能是视图)。如果它不工作,一些可能的问题可能是创建一个动作但没有让节点运行它,或者让场景或节点暂停。
  • @bg2b 抱歉,刚刚添加了我的代码。另外,我认为我的节点正确地运行了动作,因为它确实在场景中移动。虽然位置值似乎没有改变,但我真的很困惑。

标签: swift sprite-kit position skaction


【解决方案1】:

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

由于run 不等待动作完成,所以当第二个print 执行时,精灵根本没有机会移动。

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

【讨论】:

  • 哦,我明白了。谢谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
  • 2013-07-02
  • 1970-01-01
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多