Swift 什么';这两种SpriteKit功能的区别是什么?

Swift 什么';这两种SpriteKit功能的区别是什么?,swift,sprite-kit,Swift,Sprite Kit,我不知道这两个函数有什么区别 第一: coin.run(SKAction.moveTo(y: -146.115, duration: 0)) 第二: coin.position.y = -146.115 SKAction.moveTo()有一个duration参数,因为它是在指定时间间隔内更改节点位置的动画版本。另一方面,更改节点的位置不会设置移动的动画。在第一行中,您使用的是coin类对象,并通过其对象运行访问函数 coin.run(SKAction.moveTo(y: -146.115,

我不知道这两个函数有什么区别

第一:

coin.run(SKAction.moveTo(y: -146.115, duration: 0))
第二:

coin.position.y = -146.115

SKAction.moveTo()
有一个
duration
参数,因为它是在指定时间间隔内更改节点位置的动画版本。另一方面,更改节点的位置不会设置移动的动画。

在第一行中,您使用的是coin类对象,并通过其对象运行访问函数

coin.run(SKAction.moveTo(y: -146.115, duration: 0))
在第二行coin类对象中,访问其属性
position.y
,并为其指定浮点值

coin.position.y = -146.115

希望你得到它

直到下一帧,即
更新之后,才会处理SKAction。如果在
didealuateActions
之后调用
.run
,您的位置将不会更新,您可能会因此遇到错误

第二行代码将立即发生,无论您在SK循环中的位置如何

例如,如果您正在使用物理,并在
didbeagin(contact
)中调用
.run(.move(
),然后希望精灵已经移动了
didEnd(contact)
,那么您将遇到问题。在这种情况下,您希望手动调整
.position
,而不是使用操作

其次,
.run
命令的性能也较差,因为它需要初始化SKAction对象,这比仅手动调整位置要慢20-30%

诚然,这一数量的差异加起来并不多,但在复杂的场景中,这可能是在16毫秒(60帧/秒)内完成所有事情与否的差异


第三,正如其他人所提到的,有一个
forDuration
参数,它允许你在一段时间内设置运动动画。比如说,2秒,或者你想要多长时间。

请参阅这里的SKAction文档。简言之,SKAction在指定的持续时间内将精灵对象设置到新位置。嘿,谢谢r促成了这一点。请查看我的答案,以获得关于差异的更详细描述:)嘿,这里,实际上不仅仅是参数和动画。如果您愿意,请查看我的答案:)