SpriteKit MoveToX:来自Current Stat的持续时间

时间:2014-06-24 10:30:30

标签: ios 2d sprite-kit sprite

我打算从左到右随机地沿x轴移动一批精灵,说0到320和 从右到左说320到0,有一些常数持续时间,

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

但是当我创建我的一批精灵并在每个精灵上应用该障碍时

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

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

我知道问题出在我的方法上,moveToX 常量持续时间

在我的情况下,我需要常量持续时间,我们在moveToX中有什么像我们在

中所拥有的那样
 [UIView setAnimationBeginsFromCurrentState:YES]

这样我就可以解决x轴上随机位置的批量精灵的问题

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

可以从here

获取示例应用

修改

我需要更新代码here

但我需要骰子上存在的所有精灵,没有任何Timeinterval,并且对所有精灵都应用相同的动作。

任何建议都将受到赞赏 感谢
Umer

1 个答案:

答案 0 :(得分: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
                                                                                                  ]]]
                                               ]];
]]