修改正在运行的SKAction的速度

我有这个代码:

@implementation MyScene { SKAction *delayAction; } Inside a method: delayAction = [SKAction waitForDuration:3.0]; [self runAction:[SKAction repeatActionForever: [SKAction sequence: @[delayAction, [SKAction ...]]]]] withKey:@"myKey"]; 

然后我想减less加class时间。 (这种方法是更新:)所以我试过:

  - (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]; } 

这将执行你的行动,然后回到这个function,再次运行一个不同的等待,再次,…

你甚至可以通过在if块中跳转的一些结束条件停止序列并停止循环。

我有点晚了,但是你可以改为将操作设置为SKActionTimingEaseOut。 这也是本地语言,应该稍微加快一点。 (虽然你不能自定义速度变化)这可以做到这一点类似:

  1. yourSKAction.timingMode = SKActionTimingEaseOut;
Interesting Posts