修改正在运行的SKAction的速度

God*_*her 2 iphone objective-c ios sprite-kit skaction

我有这个代码:

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

delayAction = [SKAction waitForDuration:3.0];
[self runAction:[SKAction repeatActionForever: [SKAction sequence:
                                                @[delayAction, [SKAction ...]]]]]
                                                  withKey:@"myKey"];
Run Code Online (Sandbox Code Playgroud)

然后我想减少加班时间.(此方法在更新时调用:)所以我试过:

    - (void)updateVelocity
{
    NSLog(@"duration:%f",delayAction.duration);
    delayAction.duration = delayAction.duration - 0.001;
}
Run Code Online (Sandbox Code Playgroud)

我得到:

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
Run Code Online (Sandbox Code Playgroud)

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

Fog*_*ter 7

我会以不同的方式做到这一点.像这样......

- (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];
}
Run Code Online (Sandbox Code Playgroud)

这将执行您的操作,然后返回此功能以使用不同的等待时间再次运行,并再次,...

您甚至可以通过使一些结束条件跳转到if块内并停止循环来停止序列.