CCActionTween permette di aggiornare progressivamente una proprietà di un oggetto durante un certo arco di tempo. Ad esempio è possibile incrementare la proprietà scaleX
di un CCNode durante un certo numero di secondi. Questo ci permette di creare effetti di transizione non lineare nelle animazioni (il cosiddetto easing).
La classe CCActionTween
estende CCActionInterval
quindi rappresenta un'azione (come quelle che esamineremo da ora in poi) che hanno una durata maggiore di 0 secondi e minore di infinito.
Vediamo come applicarla al nostro sprite cercando di modificare il codice in modo che quando l'utente tocchi lo sprite, questo raddoppi la propria larghezza durante un periodo di 3 secondi.
Aprite il file Ball.m e aggiungete il seguente metodo:
- (void)increaseWidth
{
CCActionTween * actionTween = [CCActionTween actionWithDuration:3 key:@"scaleX" from:1.0 to:3.0];
[self runAction:actionTween];
}
La prima riga crea un'azione di tipo CCAction
specificando durata (3 secondi) proprietà da modificare (scaleX
) valore di partenza (1.0) e valore di destinazione (3.0).
La seconda riga semplicemente esegue l'azione sull'oggetto corrente.
Ricordate di aggiungere la dichiarazione del metodo al file Ball.h
.
@interface Ball : CCSprite {
}
+ (Ball*)ball;
- (void)moveForever;
- (void)applyFlipX;
- (void)applyHide;
- (void)increaseWidth;
@end
Infine aprite HelloWorldLayer.m e modificate il metodo ccTouchBegan:withEvent: in modo da invocare il metodo increaseWidth di Ball invece di applyHide.
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
CCSprite * sprite = [self findSpriteFromTouch:touch];
if (sprite && [sprite isKindOfClass:Ball.class]) {
Ball * ball = (Ball*) sprite;
// [ball applyHide];
[ball increaseWidth];
}
return YES;
}
CMD+R
per eseguire il progetto nel simulatore. A questo punto toccando lo sprite quest'ultimo dovrebbe triplicare la propria larghezza durante un periodo di tempo pari a 3 secondi.