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

Una classe per ogni sprite: estendere CCSprite

Scrivere codice mantenibile definendo una classe per ogni tipo di sprite, che ne contenga la logica e le caratteristiche particolari.
Scrivere codice mantenibile definendo una classe per ogni tipo di sprite, che ne contenga la logica e le caratteristiche particolari.
Link copiato negli appunti

Esaminando la classe HelloWorldLayer.m notiamo che il sorgente non si occupa soltanto della logica del layer ma contiene anche del codice relativo al nostro sprite. Ad esempio non è corretto, dal punto di vista della programmazione a oggetti, che il nome del file ball.png sia presente all'interno di HelloWorldLayer. Con il crescere delle classi dedicate agli sprite questo approccio porterà a un aumento della complessità del codice che vi renderà sempre più difficile gestire il progetto.

Il suggerimento quindi è quello di definire una classe per ogni tipo di sprite presente nel gioco. Creiamo quindi la classe Ball che conterrà la logica dello sprite che stiamo utilizzando. Questa classe estenderà CCSprite.

  • In Xcode selezionate il gruppo MyFirstGame nel Project Navigator.
  • Scegliete File > New > File...
  • Nella finestra che appare scegliere cocos2d v2.x dal menu di sinistra.
  • Poi scegliete CCNode class e quindi Next.
  • Digitate CCSprite e premete Next.
  • Assegnate il nome Ball alla nuova classe e premete Create.
Figura 21. Creare una sottoclasse su Xcode
Creare una sottoclasse su Xcode
Figura 22. Assegnare il nome alla classe

Assegnare il nome alla classe

Ora nel Project Navigator sono apparsi 2 nuovi sorgenti: Ball.h e Ball.m. Selezionate Ball.m e create il metodo di classe ball come segue.

+ (Ball*)ball
{
	Ball * ball = [[Ball alloc] initWithFile:@"ball.png"];
	return ball;
}

Inoltre aggiungete la dichiarazione dello stesso metodo nel file Ball.h, proprio prima dell'istruzione @end.

+ (Ball*)ball;

Premete CMD+B per compilare. a questo punto potete tornare al metodo init di HelloWorldLayer.m e modificare la prima riga usando la nuova classe.

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

Naturalmente non dimenticare di importare la nuova classe aggiungendo il seguente import a HelloWorldLayer.m:

#import "Ball.h"

Ora la logica relativa alla creazione dello sprite è stata racchiusa nella classe Ball. Se in futuro deciderete di utilizzare un'immagine diversa o vorrete aggiungere altra logica all'oggetto Ball potrete farlo senza dover modificare HelloWorldLayer o eventualmente altre classi che ne faranno uso.

CMD+R per verificare che tutto stia funzionando correttamente!

Ti consigliamo anche