Abbiamo già utilizzato quest'azione in precedenza, CCSequence permette di creare una lista di azioni che verranno eseguite in sequenza (ogni azione verrà avviata quando la precedente sarà terminata). Si tratta di uno strumento fondamentale per costruire effetti complessi partendo dalle azioni base messe a disposizione da cocos2d o altre azioni personalizzate costruite secondo le necessità.
Ad esempio possiamo fare in modo che quando l'oggetto di tipo Monkey
riceva un tocco, lampeggi per un secondo (CCBlink
) e successivamente svanisca (CCFadeOut
).
Aggiungete il seguente metodo a Monkey.m
- (void)blinkAndFadeOut
{
CCBlink * blink = [CCBlink actionWithDuration:1.0 blinks:10];
CCFadeOut * fadeOut = [CCFadeOut actionWithDuration:2.0];
NSArray * actionList = @[blink, fadeOut];
CCSequence * sequence = [CCSequence actionWithArray:actionList];
[self runAction:sequence];
}
Le prime 2 righe creano un'azione di tipo CCBlink
e CCFadeOut
. La terza riga crea un array contenente le 2 azioni create in precedenza. La quarta riga crea una CCSequence
a partire dal contenuto dell'array. Infine la quinta riga esegue l'azione di tipo CCSequence
.
Aggiungete la dichiarazione del metodo a Monkey.h
.
@interface Monkey : CCSprite
+ (Monkey*)monkey;
- (void)blink;
- (void)fadeOut;
- (void)blinkAndFadeOut;
@end
Infine aggiornate ccTouchBegan:withEvent:
di HelloWorldLayer.m
in modo da chiamare il nuovo metodo.
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
CCSprite * sprite = [self findSpriteFromTouch:touch];
if (sprite) {
if ([sprite isKindOfClass:Ball.class]) {
Ball * ball = (Ball*) sprite;
[ball increaseWidth];
} else if ([sprite isKindOfClass:Monkey.class]) {
Monkey * monkey = (Monkey*)sprite;
// [monkey blink];
// [monkey fadeOut];
[monkey blinkAndFadeOut];
}
}
return YES;
}
Se premete CMD+R
e toccate l'oggetto di tipo Monkey
dovreste vederlo lampeggiare per poi scomparire.
L'azione CCDelayTime
Quest'azione non produce nessun effetto grafico, semplicemente occupa del tempo. Siccome al momento della sua creazione è possibile indicare il numero di secondi della sua durata, risulta comoda quando vogliamo creare una sequenza (CCSequence) di azioni e vogliamo che una certa azione della lista venga eseguita con un ritardo rispetto all'azione precedente.
Torniamo all'esempio precedente. Il metodo blinkAndFadeOut
di Monkey produce, come abbiamo visto, un lampeggiamento e subito dopo una dissolvenza dell'oggetto Monkey.
Se volessimo inserire un ritardo di 2 secondi tra il lampeggiamento e la dissolvenza potremmo utilizzare CCDelayTime modificando il metodo come segue:
- (void)blinkAndFadeOut
{
CCBlink * blink = [CCBlink actionWithDuration:1.0 blinks:10];
CCDelayTime * delayTime = [CCDelayTime actionWithDuration:2.0];
CCFadeOut * fadeOut = [CCFadeOut actionWithDuration:2.0];
NSArray * actionList = @[blink, delayTime, fadeOut];
CCSequence * sequence = [CCSequence actionWithArray:actionList];
[self runAction:sequence];
}
Ora alla seconda riga del metodo viene creata un'azione CCDelayTime
della durata di 2 secondi.
Inoltre alla quarta riga l'azione viene aggiunta all'array esattamente tra blink e fadeOut
.
CMD+R
per testare l'effetto.
La documentazione di CCDelayTime è disponibile qui: http://www.cocos2d-iphone.org/api-ref/2.1.0/interface_c_c_delay_time.html