Modificar la velocidad de una SKAction en ejecución.

Tengo este código:

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

Entonces quiero disminuir la duración del time extra. (Este método se llama a la actualización 🙂 Entonces probé:

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

Y me sale:

 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 

Lo que parece bueno, pero mi [SKAction …] sigue repitiéndose después de 3 segundos.

Haría esto de una manera diferente. Algo como esto…

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

Esto realizará su acción y luego volverá a esta function para ejecutarse de nuevo con una espera diferente una y otra vez, y otra vez, …

Incluso puede detener la secuencia al tener alguna condición final que salte dentro del bloque if y detenga el bucle.

Llego un poco tarde, pero puede configurar la acción en SKActionTimingEaseOut. También es nativo del idioma y debería funcionar un poco más rápido. (Aunque no puede personalizar los cambios de velocidad) Esto se puede hacer de manera similar a esto:

  1. yourSKAction.timingMode = SKActionTimingEaseOut;