Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Le azioni principali CCFollow, RepeatForever, CCSpeed, CCFiniteTimeAction

Le azioni che ereditano direttamente da CCAction e che permettono di impostare i comportamenti più importanti ai nodi del gioco.
Le azioni che ereditano direttamente da CCAction e che permettono di impostare i comportamenti più importanti ai nodi del gioco.
Link copiato negli appunti

Possiamo applicare ai nodi una notevole lista di azioni, fornite dal cocos2d per modificarne le proprietà (es: posizione, dimensione, rotazione, colore, etc...). In precedenza ne abbiamo usate alcune per muovere uno sprite. In questa sezione ne esamineremo alcune con maggior dettaglio.

Ogni classe che rappresenta un'azione estende (direttamente o indirettamente) la classe CCAction.

Quelle che estendono direttamente CCAction sono le seguenti:

  • CCFollow
  • CCRepeatForever
  • CCSpeed
  • CCFiniteTimeAction

L'azione CCFollow

Quest'azione permette di indicare ad un nodo di seguirne un'altro. È particolarmente utile nel caso in cui si voglia simulare una telecamera virtuale che segua un certo nodo (come il protagonista del gioco) e faccia scorrere il gioco di conseguenza (situazione tipica ad esempio dei platform).

- (void)followSprite:(CCSprite*)sprite
{
	CCFollow * followAction = [CCFollow actionWithTarget:sprite];
	[self runAction:followAction];
}

Il metodo qui sopra si occupa di creare un'azione di tipo CCFollow. Nella prima riga la action viene creata invocando il metodo di classe actionWithTarget a cui bisogna passare il nodo che vogliamo venga seguito.

La seconda riga esegue l'azione sull'oggetto self. Poiché aggiungerete questo metodo a HelloWorldLayer.m (inseritelo prima dell'istruzione @end), self indica il layer che contiene gli oggetti del nostro gioco.

Potete ora provare a invocare il metodo aggiungendo la seguente chiamata alla fine del metodo init di HelloWorldLayer.m.

- (id)init
{
	if (self = [super init]) {
		Ball * ball = [Ball ball];
		CGSize screenSize = [[CCDirector sharedDirector] winSize];
		ball.position = ccp(ball.contentSize.width/2 , screenSize.height/2);
		[self addChild:ball];
		[ball moveForever];
		[self beginTouchDetection];
		[self followSprite:ball];
	}
	return self;
}

Il parametro passato è l'oggetto Ball, quindi la telecamera virtuale dovrebbe seguire il movimento del nostro sprite mentre si muove da destra a sinistra sullo schermo. Compilate ed eseguite con CMD+R e osservate l'effetto.

Stranamente lo sprite ora appare immobile al centro dello schermo. In realtà si sta muovendo e la telecamera virtuale lo sta seguendo perfettamente, per questo sembra immobile. Se volete potete aggiungete altri sprite statici al layer e la sensazione di movimento sarà più chiara.

Prima di passare al paragrafo successivo commentate la chiamata a followSprite: nel metodo init.

L'azione CCRepeatForever

CCRepeatForever viene definita prendendo come parametro un'altra azione e la ripete all'infinito (Abbiamo già utilizzato quest'azione e abbiamo visto che il loop può contenere a sua volta altre azioni). Potete crearla con la seguente riga di codice:

CCActionInterval * action = ...;
CCRepeatForever * repeatForever = [CCRepeatForever actionWithAction:action];

La condizione è che l'azione da ripetere, ovvero il parametro da passare al metodo actionWithAction, sia di tipo CCActionInterval. Si tratta di un tipo specifico di CCAction che vedremo in seguito.

Infine potete eseguirla su un qualsiasi oggetto di tipo CCNode.

[node runAction:repeatForever];

L'azione CCSpeed

Quest'azione viene costruita prendendo come parametro un'altra azione e permette di controllarne la velocità mentre è in esecuzione.

CCActionInterval * actionInterval = ...;
CCSpeed * speed = [CCSpeed actionWithAction:actionInterval speed:1.0];
CCNode * node = ...;
[node runAction:speed];

La seconda riga di questo snippet crea un'azione di tipo CCSpeed prendendo come parametro una qualche azione di tipo CCActionInterval. Poi imposta la velocità di esecuzione pari a 1.0 (ovvero la velocità di default).

La quarta riga esegue l'azione speed su un oggetto di tipo CCNode.

Successivamente sarà possibile modificare la velocità di esecuzione di actionInterval semplicemente agendo sull'oggetto speed. Il seguente codice, ad esempio, permette di raddoppiare la velocità di esecuzione:

[speed setSpeed:2.0f];

Le azioni di tipo CCFiniteAction

Questa è la quarta e ultima classe che estende direttamente CCAction e rappresenta le azioni che hanno una durata temporale finita. A sua volta viene estesa da 2 classi:

  1. CCActionInstant: rappresenta quelle azioni con durata pari a 0 secondi e quindi che terminano istantaneamente.
  2. CCActionInterval: rappresenta quelle azioni che hanno una durata maggiore di 0 secondi e non infinita.

Link utili

Per approfondire tutte le carattersitiche delle azioni è possibile consultare la documentazione ufficiale:

Inoltre è disponibile un diagramma di ereditarietà che fornisce una panoramica delle azioni disponibili.

Ti consigliamo anche