SpriteKit MoveToX:当前状态的持续时间

Posted

技术标签:

【中文标题】SpriteKit MoveToX:当前状态的持续时间【英文标题】:SpriteKit MoveToX:duration from Current Stat 【发布时间】:2014-06-24 10:30:30 【问题描述】:

我打算在 x 轴上从左到右随机移动一批精灵,比如 0 到 320 和 从右到左说 320 到 0,有一些 恒定 持续时间,

我将每个精灵放置在 x 轴上的随机位置,

但是当我创建我的一批精灵并将该skaction应用于每个精灵时

 SKAction *moveRight  = [SKAction moveToX:320 duration:walkAnim.duration];
 SKAction *moveLeft   = [SKAction moveToX:0 duration:walkAnim.duration];

一段时间后,整批精灵向一个方向移动,从左到右,然后从右到左

我知道问题出在我的方法和moveToX 恒定持续时间

在我的情况下,我需要恒定持续时间,moveToX 中是否有一些东西,就像我们在

中一样
 [UIView setAnimationBeginsFromCurrentState:YES]

这样我就可以解决在 x 轴上具有随机位置的批处理精灵的问题

注意当我给每个精灵一些空间来调用该动作时,它工作正常,但我需要一次全部。

可以从here获取示例应用

编辑

我需要什么我已经更新了代码here

但我需要骰子上存在的所有精灵,没有任何时间间隔,并且对所有精灵应用相同的操作。

任何建议将不胜感激 谢谢 乌默尔

【问题讨论】:

这里到底有什么问题?如果您有恒定的持续时间,它们当然会同时到达,然后同时开始朝另一个方向前进。如果您想要恒定速度,则需要计算所需距离的持续时间。 我永远需要运动.. 以同样的速度,您是否查看了示例应用程序以更好地了解我所面临的情况.. 问题就在那里,我不想要一些精灵以不同的速度移动。我希望所有精灵都具有相同的速度,这就是我使用恒定持续时间的原因 我已经更新了我的问题,以便有人能更好地理解我的意思 【参考方案1】:

要保持恒定速度,您需要根据精灵的当前位置计算第一个动作动作的持续时间。完成第一步后,您可以使用 moveRightmoveLeft 操作。这是开始向右移动的示例。

CGFloat durationForFullDistance = walkAnim.duration;
CGFloat fullDistance = 320;
CGFloat firstDistance = fullDistance - sprite.position.x; 
CGFloat durationForFirstMove = durationForFullDistance*firstDistance/fullDistance;

SKAction *firstMoveRight  = [SKAction moveToX:320 duration:durationForFirstMove];
SKAction *moveRight  = [SKAction moveToX:320 duration:durationForFullDistance];
SKAction *moveLeft   = [SKAction moveToX:0 duration:durationForFullDistance];

SKAction *continousMove = [SKAction sequence:@[
                                               firstMoveRight,
                                               [SKAction repeatActionForever:[SKAction sequence:@[
                                                                                                  moveLeft,
                                                                                                  moveRight
                                                                                                  ]]]
                                               ]];
]]

【讨论】:

所以在您的情况下,这意味着不将 self.sequence 分配给精灵,而是使用 @[firstMove,turn,self.sequence] 创建一个新序列

以上是关于SpriteKit MoveToX:当前状态的持续时间的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit 中的持续移动

SKAction.moveToX 重复值变化

如何使用 count-Swift SpriteKit 更改运动的持续时间?

如何隐藏 SpriteKit 游戏的状态栏? [复制]

spritekit无法从后台状态获取打印

持续实时获取当前在 Spotify 上播放的歌曲