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】:要保持恒定速度,您需要根据精灵的当前位置计算第一个动作动作的持续时间。完成第一步后,您可以使用 moveRight
和 moveLeft
操作。这是开始向右移动的示例。
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:当前状态的持续时间的主要内容,如果未能解决你的问题,请参考以下文章