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

Animare uno sprite con l'azione CCAnimate

Come impostare sequenze di immagini per animare personaggi e nemici
Come impostare sequenze di immagini per animare personaggi e nemici
Link copiato negli appunti

Per animare uno sprite in un videogioco 2D (così come accade nei film di animazione 2D) si preparano una serie di immagini che mostrano le varie fasi dell'animazione e poi si sostituiscono velocemente in modo da ricreare l'illusione del movimento.

In cocos2d la classe CCAnimate svolge proprio questo compito, vediamo come funziona.

Prima di tutto bisogna ottenere delle immagini che mostrano un personaggio in varie pose. Potete scaricare il Monkey Platformer Game Art for iPhone e iPad messo a disposizione da Vicky Wenderlich.

Una volta scaricato e decompresso il file avrete a disposizione una serie di immagini in formato PNG. In Xcode fate click destro sul gruppo Resources nel Project Navigator e scegliete Add Files to "MyFirstGame"...

.

Ora navigate fino alla cartella del vostro Mac contenete le immagini appena scaricate e selezionate i seguenti 2 file:

monkey_walk_right_1.png
monkey_walk_right_2.png

Assicuratevi che l'opzione Copy items into destination group's folder (if needed) sia selezionata e premete Add.

Le seguenti 2 immagini sono state aggiunte al progetto e possono essere utilizzate.

Il prossimo passo consiste nel creare la classe Monkey. In Xcode selezionate il gruppo MyFirstGame nel Project Navigator e dai menu File scegliete New > File... Nel menu di sinistra scegliete cocos2d v2.x dal riquadro iOS e poi selezionate CCNode class.

Premete Next.

Nel campo Subclass of digitate CCSprite e premete Next.
Nel campo Save as digitate Monkey e premete Create.

Aprite il file Monkey.m e inserite al suo interno il seguente metodo.

@implementation Monkey
+ (Monkey*)monkey
{
	// 1 - vengono creati 2 sprite corrispondenti alle 2 immagini
	CCSprite * sprite1 = [CCSprite spriteWithFile:@"monkey_walk_right_1.png"];
	CCSprite * sprite2 = [CCSprite spriteWithFile:@"monkey_walk_right_2.png"];
	// 2 - viene creato un array contenete l'oggetto CCSpriteFrame per ognuno dei 2 sprite
	NSArray * frames = @[sprite1.displayFrame, sprite2.displayFrame];
	// 3 - si costruire l'oggetto CCAnimation usando l'array di CCSpriteFrame e il valore di attesa tra un frame e l'altro
	CCAnimation * animation = [CCAnimation animationWithSpriteFrames:frames delay:0.2f];
	// 4 - si create la action animate usando l'oggetto animation
	CCAnimate * animate = [CCAnimate actionWithAnimation:animation];
	// 5 - l'animazione viene incapsulata in una action di CCRepeatForever in modo che venga eseguito un loop infinito
    CCRepeatForever * repeatForever = [CCRepeatForever actionWithAction:animate];
	// 6 - si crea l'oggetto Monkey usando il primo CCSpriteFrame
	Monkey * monkey = [[Monkey alloc] initWithSpriteFrame:sprite1.displayFrame];
	// 7 - viene eseguita l'animazione (ripetuta) su monkey
	[monkey runAction:repeatForever];
	// 8- l'oggetto monkey viene restituito
	return monkey;
}
@end

Come si legge nei commenti, provvediamo anzitutto a creare due sprite a partire dalle immagini PNG importate nel progetto. Quindi aggiungiamo il CCSpriteFrame di ognuno dei due sprite all'array frames.

Nel terzo blocco di codice creiamo un oggetto CCAnimation usando i due CCSpriteFrame precedenti e specificando il ritardo che deve intercorrere tra ogni frame.

Al punto 4 creiamo una azione CCAnimate usando l'oggetto CCAnimation precedente. Poi annidiamo l'azione dentro un'altra azione di tipo CCRepeatForever , proprio per farla ripetere all'infinito.

Nel sesto blocco istanziamo un'oggetto di tipo Monkey usando il primo dei CCSpriteFrame creati in precedenza e al punto 7 facciamo eseguire l'azione repeatForever sull'oggetto monkey. Infine restituiamo l'oggetto monkey.

Ricordate di aggiungere la dichiarazione del metodo al file Monkey.h.

@interface Monkey : CCSprite
+ (Monkey*)monkey;
@end

Ora bisogna aggiungere l'oggetto Monkey al layer HelloWorldLayer.

Aprite HelloWorldLayer.m e importate il file Monkey.h.

#import "Monkey.h"

Poi aggiungete il seguente metodo:

- (void)addAnimatedMonkey
{
	Monkey * monkey = [Monkey monkey];
	monkey.position = ccp(monkey.contentSize.width/2 , monkey.contentSize.height/2);
	[self addChild:monkey];
}

Infine invocatelo alla fine del metodo init:

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

CMD + R per eseguire il progetto nel simulatore: dovreste vedere lo sprite monkey animato.

Link utili

Ti consigliamo anche