Ios 修改运行操作的速度

Ios 修改运行操作的速度,ios,iphone,objective-c,sprite-kit,skaction,Ios,Iphone,Objective C,Sprite Kit,Skaction,我有以下代码: @implementation MyScene { SKAction *delayAction; } Inside a method: delayAction = [SKAction waitForDuration:3.0]; [self runAction:[SKAction repeatActionForever: [SKAction sequence: @[delayActi

我有以下代码:

@implementation MyScene {
SKAction *delayAction; 
}
Inside a method:

delayAction = [SKAction waitForDuration:3.0];
[self runAction:[SKAction repeatActionForever: [SKAction sequence:
                                                @[delayAction, [SKAction ...]]]]]
                                                  withKey:@"myKey"];
然后我想减少加班时间。更新时调用此方法: 所以我试着:

    - (void)updateVelocity
{
    NSLog(@"duration:%f",delayAction.duration);
    delayAction.duration = delayAction.duration - 0.001;
}
我得到:

2014-04-04 11:45:05.781 FlyFish[5409:60b] duration:1.300000
2014-04-04 11:45:05.785 FlyFish[5409:60b] duration:1.299000
2014-04-04 11:45:05.800 FlyFish[5409:60b] duration:1.298000
2014-04-04 11:45:05.816 FlyFish[5409:60b] duration:1.297000

这似乎很好,但我的[SKAction…]在3秒后仍继续重复。

我会用另一种方式来做。像这样的

- (void)recursiveActionMethod
{
    if (some end condition is met) {
        return;
        // this allows you to stop the repeating action.
    }

    self.duration -= 0.01;
    // store duration in a property

    SKAction *waitAction = [SKAction waitForDuration:self.duration];
    SKAction *theAction = [SKAction doWhatYouWantHere];
    SKAction *recursiveAcion = [SKAction performSelector:@selector(recursiveActionMethod) onTarget:self];

    SKAction *sequence = [SKAction sequence:@[waitAction, theAction, recursiveAction]];
    [self runAction:sequence];
}
这将执行您的操作,然后返回此函数,并以不同的等待时间再次运行,然后再次运行


您甚至可以通过在if块内设置一些结束条件来停止序列,并停止循环。

我有点晚了,但是您可以将操作设置为SKActionTimingEaseOut。另外,这是一种本地语言,应该可以稍微快一点。虽然您无法自定义速度变化 这可以类似于这样做:

yourSKAction.timingMode=SKActionTimingEaseOut;
很好的解决方案。无论如何,我用不同的方法解决了。我用actionForKey搜索了这个动作:然后我删除了它。在此之后,我以不同的等待时间再次启动它。