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

Ios SpriteKit MoveToX:当前状态的持续时间,ios,2d,sprite-kit,sprite,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]; 一段时间后,整批精

我计划将一批雪碧沿着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轴上具有随机位置的批处理精灵的问题

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

你可以从中获得示例应用程序

编辑

我需要的是我已经更新了代码

但是我需要骰子上所有的精灵,没有任何时间间隔,所有精灵都有相同的动作

如有任何建议,将不胜感激
谢谢

Umer

要获得恒定的速度,您需要根据精灵的当前位置计算第一次移动动作的持续时间。完成第一步后,您可以使用
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
                                                                                                  ]]]
                                               ]];
]]

这里到底有什么问题?如果持续时间不变,它们当然会同时到达,然后同时开始向另一个方向移动。如果你想要恒定的速度,你需要计算所需距离的持续时间。我需要永远的运动。。在同样的速度下,你是否查看了示例应用程序以更好地了解我所面临的问题。问题就在这里,我不希望一些sprite以不同的速度移动。我希望所有精灵都有相同的速度,这就是为什么我使用恒定持续时间我更新了我的问题,以便有人能更好地理解我的意思所以在你的情况下,这意味着不给精灵分配self.sequence,而是创建一个带有@[第一步,转身,self.sequence]的新序列