如何解决当您在 SKSpriteNode 上使用 SKAction 时,哪个位置值会发生变化?我将如何解释职位变化?
我正在尝试使用 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 帧/秒时,这意味着精灵将在 12 帧后才能到达最终位置。如果您在 update(_:)
中的每一步都打印礼物的位置,您会发现它确实在发生变化。
由于 run
不会等待操作完成,因此在执行第二个 print
时,精灵根本没有机会移动。
如果您希望某事仅在某个操作完成后发生,您有多种可能性。一种常见的方法是添加一个完成块;请参阅 Apple 的操作入门文档:https://developer.apple.com/documentation/spritekit/getting_started_with_actions。或者,如果您希望同一个节点按顺序执行多项操作,则可以创建一个复合 SKAction
,例如使用 sequence
或 repeat
初始值设定项。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。