Questa azione provoca il lampeggiamento del nodo su cui viene eseguita, l'effetto viene ottenuto agendo sulla visibilità del nodo. Vediamo come applicarla alla classe Monkey. Aprite Monkey.m
e aggiungete il seguente metodo:
- (void)blink
{
CCBlink * blink = [CCBlink actionWithDuration:1.0];
[self runAction:blink];
}
La prima riga crea un'azione CCBlink
specificandone la durata di 1 secondo. La seconda la esegue sull'istanza corrente dell'oggetto di tipo Monkey
.
Aggiungete la dichiarazione del metodo nel file Monkey.h
.
@interface Monkey : CCSprite
+ (Monkey*)monkey;
- (void)blink;
@end
Ora aprite HelloWorldLayer.m.
Poiché l'oggetto monkey dovrà lampeggiare quando riceve un tap, dobbiamo modificare il metodo ccTouchBegan:withEvent:
. Attualmente il metodo verifica che se è stato toccato uno CCSprite
di tipo Ball
e in caso ne incrementa la larghezza.
Modifichiamolo in modo che, nel caso in cui lo sprite toccato sia di tipo Monkey
, allora ne invochi il metodo blink.
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
CCSprite * sprite = [self findSpriteFromTouch:touch];
if (sprite && [sprite isKindOfClass:Ball.class]) {
Ball * ball = (Ball*) sprite;
[ball increaseWidth];
} else if (sprite && [sprite isKindOfClass:Monkey.class]) {
Monkey * monkey = (Monkey*)sprite;
[monkey blink];
}
return YES;
}
Ora il metodo dovrebbe funzionare, tuttavia stiamo controllando 2 volte che la variabile sprite sia diversa da nil
(nel primo e nel secondo if
). Si tratta di un'operazione trascurabile in termini di sovraccarico del sistema tuttavia c'è un modo migliore di scrivere lo stesso codice.
- (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];
}
}
return YES;
}
CMD + R per verificare che quando l'oggetto Monkey
riceve un tocco lampeggi.
L'azione CCBlink può essere costruita con un secondo metodo di classe che permette di specificare oltre alla durata dell'effetto anche il numero di volte che il nodo deve lampeggiare.
Potete provarlo aprendo Monkey.m
e modificando il metodo blink
come segue:
- (void)blink
{
CCBlink * blink = [CCBlink actionWithDuration:1.0 blinks:10];
[self runAction:blink];
}
Ora l'oggetto Monkey lampeggerà per 10 volte in 1 secondo. CMD + R per provare l'effetto.
La documentazione di quest'azione è disponibile qui.