30
2011
Esplosione con cocos2D
In questo tutorial vi illustrerò come realizzare un’esplosione al tocco del dito sullo schermo.
Partiamo quindi con il creare un nuovo progetto cocos2D
Qui i file necessari per l’esplosione, un .plist e un immagine .png
Download Grafica esplosione
Loggati per scaricare il fileAggiungere la chiamata nel file helloWorldScene.h subito sotto la chiusura del blocco @interface
-(void)Explosion:(CGPoint)newPosition;
Questa è la dichiarazione della nostra funzione. Tornerà la posizione del touch, se si omette questa chiamata tornerà questo errore: “‘hello world’ may not respond to ‘-Explosion’”
Ora passiamo al file .m
Per prima cosa dobbiamo dire al programma che il touch è valido, per fare questo aggiungiamo al metodo init la seguente dichiarazione
self.isTouchEnabled=TRUE;ora l’applicazione è pronta a ricever il touch.
Ora i metodi che definiscono il tocco, per questa app useremo solo la chiamata a fine tocco. Da inserire sempre nel file .m
-(void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint location = [touch locationInView:[touch view]]; location = [[CCDirector sharedDirector] convertToGL:location]; [self Explosion:location]; }
Nel codice precedente viene dichiarato che ogni tocco è valido, poi localizza il dito e infine chiama il nostro metodo Explosion, che ora andiamo a creare.
-(void) Explosion:(CGPoint)newPosition{ [[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"Explosion.plist"]; CCSprite *sprite = [CCSprite spriteWithSpriteFrameName:@"Explotion1.png"]; sprite.position = newPosition; [self addChild:sprite z:3]; NSMutableArray *animFrames = [NSMutableArray array]; CCSpriteFrame *frame1 = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"Explotion1.png"]; [animFrames addObject:frame1]; CCSpriteFrame *frame2 = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"Explotion2.png"]; [animFrames addObject:frame2]; CCSpriteFrame *frame3 = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"Explotion3.png"]; [animFrames addObject:frame3]; CCAnimation *animation = [CCAnimation animationWithName:@"dance" delay:0.2f frames:animFrames]; [sprite runAction:[CCSequence actions:[CCAnimate actionWithAnimation:animation restoreOriginalFrame:YES], [CCCallFuncN actionWithTarget:self selector:@selector(spriteDone:)],nil]]; [[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames]; }
Ecco qua la nostra creazione.
La prima riga richiama il plist che è scaricabile all’inizio del tutorial
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"Explosion.plist"];
la seconda è un array mutabile, cioè che possono essere aggiunti spostati eliminati o modifica elementi all’interno dell’array, objective-c ne ha di diversi tipi.
NSMutableArray *animFrames = [NSMutableArray array];
Le righe che seguono creano la sequenza di frame per l’animazione e le deposita nella cache, cosi facendo vengono caricate prima e non vi saranno ritardi all’apertura del programma.
infine il tutto viene richiamato per creare una vera e propria animazione e vengono rimosse le immagini dalla cache.
[sprite runAction:[CCSequence actions:[CCAnimate actionWithAnimation:animation restoreOriginalFrame:YES],
Ultimo passo: questa funzione pulisce il tutto alla fine dell’animazione
- (void)spriteDone:(id)sender { CCSprite *sprite = (CCSprite *)sender; [self removeChild:sprite cleanup:YES]; }
Download Explosion
Loggati per scaricare il fileFai una domanda nella sezione answer
Articoli correlati
20 Commenti + Aggiungi commento
Log In
Articoli In Evidenza
Commenti recenti
- Zaen su Cocos2D: Creare un menu con effetti di animazione e di transizione
- Gabriele Carbonai su Cocos2D: Creare un menu con effetti di animazione e di transizione
- Gabriele Carbonai su Cocos2D: Creare un menu con effetti di animazione e di transizione
- Zaen su Cocos2D: Creare un menu con effetti di animazione e di transizione
- Zaen su Cocos2D: Creare un menu con effetti di animazione e di transizione
- Zaen su Cocos2D: Creare un menu con effetti di animazione e di transizione
- Gabriele Carbonai su Cocos2D: Creare un menu con effetti di animazione e di transizione
- Zaen su Cocos2D: Creare un menu con effetti di animazione e di transizione
Categorie
- Applicazioni utenti (5)
- Appunti di programmazione (9)
- box2D (21)
- cocos2D (44)
- Contest (3)
- Corona SDK (3)
- Developer Software (4)
- news (18)
- objective-c (2)
- open source (6)
- Problemi da sviluppatore (3)
- Video tutorial (19)




Articolo scritto da Gabriele Carbonai


























la cartella con il file plist e le foto contiene solo 2 file:
explotion.plist
explotion.bmp
sicuro sia giusto?
Dovrebbe essere png il file ma ora non ricordo.. Comunque sia è corretto..
Confermo… Uno è plist e l’altro png. Perché questo dubbio? Cosa non ti è chiaro?
Che nella cartella ci sono i file:
explotion.plist
explotion.png
e nel codice sono citati:
Explosion.plist
Explotion1.png
Explotion2.png
Explotion3.png
E’ giusto lo stesso?
Perché a me il codice non da errori però nella simulazione esce la scritta di hello world come se non avessi scritto niente.
explotion1.png 2 e 3 non esistono realmente.
si ha un immagine explotion.png grande contenente diciamo le altre tre immagini.
poi si ha un file plis che mappa l’immagine explosion.png.
all’interno del file plist ci sono le diverse mappature che hanno il nome explotion1.png e cosi via con delle coordinate per prelevare solo la parte di immagine interessata.
all’interno di init togli tutto il codice che stampa hello world.. deve essere cosi:
-(id) init
{
// always call “super” init
// Apple recommends to re-assign “self” with the “super” return value
if( (self=[super init] )) {
self.isTouchEnabled=TRUE;
}
return self;
}
con il touch valido… ora appena tocchi lo schermo partono tutti gli eventi e vedi l’esposione
Lo schermo resta nero tranne i numeri che si muovo in basso a destra ma non mi da nessun errore. Prova a dare un occhiata. http://imageshack.us/photo/my-images/194/schermata112455893alle1.png/
grazie
è giusto che vedi una schermata nera.. devi cliccare sopra lo schermo per vedere l’animazione.
tutti i codici tutorial di questo blog vengono prima realizzati e testati con xcode, dopo di che vengono fatti i tutorial con il copia e incolla in modo da non sbagliare
ho provato ma dopo il click xcode mi restituisce il tipico errore
http://imageshack.us/photo/my-images/683/schermata112455893alle1.png/
ti ho caricato il progetto completo cosi che puoi provarlo e capire dove c’è l’errore
Grazie, l’errore era proprio nel nome dei file
Ciao,
innanzitutto complimenti per l’iniziativa, devo dire che il blog mi sta tornando molto utile…
Sono arrivato a questa esercitazione ma non riesco a capire dove sbaglio, mi spunta la videata nera ma toccando lo schermo nn mi spunta nulla..dove posso sbagliare??
hai aggiunto le immagini?
la schermata nera è normale ma quando tocchi dovresti vedere un esplosione
si le immagini le ho aggiunte!!
ma non mi spunta nulla
http://imageshack.us/photo/my-images/685/schermata012455942alle1.png/
Ecco l’errore che mi spunta!!!
Grazie mille
Dario
strano… hai provato a scaricare il progetto?
Continua a darmi l’errore su ccanimation puoi inoltrarmi la stringa corretta?
la mia è:
CCAnimation *animation =[CCAnimation animationWithName:@"dance" delay:0.2f frames:animFrames];
che tipo di errore ti da?
ecco l’errore:
Class method + animationWhitName:delay:frames:’not found (return type defaults to ‘id