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
nelProject Navigator
. - Scegliete
File > New > File...
- Nella finestra che appare scegliere
cocos2d v2.x
dal menu di sinistra. - Poi scegliete
CCNode class
e quindiNext
. - Digitate
CCSprite
e premeteNext
. - Assegnate il nome
Ball
alla nuova classe e premeteCreate
.
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!