• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

8. Particle Effect con cocos2d

By IgnazioC | on 18 Settembre 2012 | 5 Comments
Corso programmazione videogiochi

corso-programmazione-videogame-cocos2d-08 In questa lezione parliamo di Particle Effect, una funzione molto apprezzata di cocos2d per aggiungere degli effetti veramente interessanti ai nostri videogiochi.

Particle Effect è una funzionalità molto complessa, perché permette di modificare una quantità enorme di parametri e variabili nella gerazione del sistema di particelle, così tanti che in pratica è impossibile creare un particolare effetto agendo direttamente sul codice, perché il “guess and check” durerebbe delle ore!

Se non avete mai sentito parlare di particle effect e ancora non avete capito di cosa si tratta, questa immagine vi darà un’idea più precisa di che cosa si può realizzare:


particle-effect-con-cocos2d-01

Ma iniziamo con ordine e vediamo come si può creare un semplice effetto di particelle.

La prima informazione utile è sempre quella che riguarda la gerarchia delle classi, e vediamo alla pagina della documentazione che la classe responsabile per questo particolare effetto è la classe CCParticleSystem, subclass di CCNode!
Il fatto che sia subclass di CCNode dovrebbe farci rallegrare, perché significa che possiamo usare gli effetti di particelle in ogni caso dove è previsto l’uso di un CCNode e che tutto quello che abbiamo imparato per le azioni e gli effetti si applica anche a questa nuova classe! Potenza dell’ereditarietà!

Particle System per chi ha fretta

La libreria di Cocos2d viene fornita con una piccola serie di esempi già pronti all’uso, tutti dichiarati all’interno del file CCParticleExamples.h.

Utilizzarli è molto semplice, basterà aggiungere un’istanza della specifica classe alla nostra scena.

Per questa lezione ho creato il mio solito progetto “learnParticleEffect” ed ho sostitutito il metodo init della classe HelloWorldLayer con questo:

-(id) init
{
        if( (self=[super init])) {
        CCParticleSystem* system = [CCParticleExplosion node];
        [self addChild:system z:1 tag:1];
 
        }
        return self;
}

Con una sola riga di codice ho ottenuto questo effetto:


particle-effect-con-cocos2d-02

al posto di CCParticleExplosion avrei potuto usare una qualsiasi di queste subclass già pronte:

  • CCParticleExplosion
  • CCParticleFire
  • CCParticleFireworks
  • CCParticleFlower
  • CCParticleGalaxy
  • CCParticleMeteor
  • CCParticleRain
  • CCParticleSmoke
  • CCParticleSnow
  • CCParticleSpiral
  • CCParticleSun

Una nota: avete notato che ho dichiarato la variabile come CCParticleSystem e non come CCParticleExplosion, questo ci permette di ragionare in termini più astratti, senza bisogni di cambiare continuamente il tipo della variabile.

Particle System per chi vuole capire

Gli undici esempi forniti da cocos2d sono soltanto pochissimi tra gli innumerevoli effetti che si possono realizzare, quindi vediamo quali sono le possibilità fornite creando una nostra subclass.

La proprietà più importante, dalla quale dipende poi la possibilità di usare alcune o altre opzioni è la proprietà

emitterType

Dalla pagina di documentazione leggiamo che può assumere due valori:

  • kCCParticleModeGravity: uses gravity, speed, radial and tangential acceleration
  • kCCParticleModeRadius: uses radius movement + rotation

Il primo serve per crearea emettitori di particelle che seguno “la gravità” (gravità che setteremo noi!) mentre l’altro tipo crea emettitori di particelle radiali, come CCParticleExplosion che abbiamo visto poco fa.

Sempre con uno sguardo alla documentazione notiamo una cosa interessante, molte proprietà sono affiancate da una con lo stesso nome, ma con il suffisso “var”, come speed e speedVar, startSize e startSizeVar… come mai?

In pratica possiamo scegliere non solo il valore della proprietà, ma anche la sua varianza. Ad esempio possiamo scegliere che la dimensione iniziale sia di 10 e che la sua varianza sia di 5, quindi avremo particelle di dimensione variabile da 5 a 15. Questa variabilità aiuta ad aumentare il realismo…
Pesante ad un effetto neve in cui i fiocchi siano tutti esattamente della stessa dimensione, è molto più realistico se la dimensione varia leggermente, no?

Creiamo quindi la nostra subclass di CCParticleSystem, io l’ho chiamata DEVAPPEmitter con il solito procedimento file->new->new file.

A causa delle diverse CPU che sono state utilizzate sui dispositivi apple, esistono due grandi categorie di particle emitter, una è CCParticleSystemPoint e l’altra è CCParticleSystemQuad. Senza entrare troppo nel dettaglio la nostra classe dovrà ereditare da una di queste due… ma quale?

Anche qui i ragazzi di cocos ci danno una mano, hanno previsto infatti una macro
ARCH_OPTIMAL_PARTICLE_SYSTEM che restituisce automaticamente la classe corretta… modifichiamo quindi la nostra classe in questo modo:

#import "CCParticleSystem.h"
#import "cocos2d.h"
@interface DEVAPPEmitter : ARCH_OPTIMAL_PARTICLE_SYSTEM
@end

Il metodo principale sarà questo:

-(id) initWithTotalParticles:(NSUInteger)numParticles
{
        if ((self = [super initWithTotalParticles:numParticles]))
        {
                self.duration = kCCParticleDurationInfinity;
                self.emitterMode = kCCParticleModeGravity;

                self.gravity = CGPointMake(0, -90);
       
                self.radialAccel = -90;
                self.radialAccelVar = 20;
       
                self.tangentialAccel = 100;
                self.tangentialAccelVar = 10;
       
                // speed is of course how fast particles move in general
                self.speed = 15;
                self.speedVar = 4;
       
                self.position = CGPointZero;
                self.posVar = CGPointZero;
                self.startSize = 40.0f;
                self.startSizeVar = 0.0f;
                self.endSize = kCCParticleStartSizeEqualToEndSize;
                self.endSizeVar = 0;
       
                self.angle = 0;
                self.angleVar = 0;                
                self.life = 5.0f;
                self.lifeVar = 0.0f;                
                self.emissionRate = 30;
                       
                startColor.r = 0.0f;
                startColor.g = 0.0f;
                startColor.b = 0.0f;
                startColor.a = 1.0f;
       
                startColorVar.r = 1.0f;
                startColorVar.g = 1.0f;
                startColorVar.b = 1.0f;
                startColorVar.a = 0.0f;
                
                endColor.r = 0.0f;
                endColor.g = 0.0f;
                endColor.b = 0.0f;
                endColor.a = 1.0f;
                
                endColorVar.r = 1.0f;
                endColorVar.g = 1.0f;
                endColorVar.b = 1.0f;
                endColorVar.a = 0.0f;
                
                self.blendFunc = (ccBlendFunc){GL_SRC_ALPHA, GL_DST_ALPHA};        
                self.texture = [[CCTextureCache sharedTextureCache] addImage: @"fire.png"];
        }
        
        return self;
}

Come potete vedere ho dovuto settare molte delle proprietà dell’emitter, in un modo che non aveva molto di scientifico, ma era più un “proviamo questo valore qui”… insomma se davvero vi serve un emitter non è il caso che vi mettiate a provare a crearlo via codice, ma potete usare la soluzione del prossimo paragrafo.

Particle System per chi ha capito ed ora vuole fare.

Per generare rapidamente le configurazioni per un emettitore di particelle esistono diversi software, alcuni anche per iPad, che offrono la possibilità di simulare il risultato finale senza per questo dover ricompilare.

Il tool “ufficale” (tra virgolette perché non è ufficiale) è Particle Designer, ma ne esistono veramente tante, io per questa lezione ho usato particles, perché comprato in offerta tempo fa.


particle-effect-con-cocos2d-03

Con questi programmi è facile modificare tutti i parametri e vedere live il loro effetto. Una volta creato l’emettitore che più ci aggrada, questi programmi salvano tutte le informazioni in un file *.plist, il classico formato apple.

Per poter generare un nuovo emitter basato su queste informazioni copiamo il file plist all’interno del progetto, quindi inizializziamo un’istanza della classe CCParticleSystemQuad attraverso il metodo particleWithFile, come vediamo in questo esempio:

-(id) init
{
        if( (self=[super init])) {
        self.isTouchEnabled = YES;
       
        //CCParticleSystem* system = [DEVAPPEmitter node];
        CCParticleSystem *system = [CCParticleSystemQuad particleWithFile:@"Flower2.plist"];
        [self addChild:system z:1 tag:1];
 
        }
        return self;
}

Otterremo un risultato come questo:


particle-effect-con-cocos2d-04

Questa lezione termina qui, vi lascio ai vostri particle emitters e mi raccomando… possono causare dipendenza!!

Buona programmazione
IgnazioC

Share this story:
  • tweet

Tags: CCParticleSystemcorso cocos2d italianocreare videogame iosemitterTypeesempi cocos2dparticle effect cocos2dtutorial cocos2d

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • 7. Come creare uno sfondo con scrolling infinito con cocos2d

    4 Settembre 2012 - 5 Comments
  • 03. Realizziamo il nostro primo videogioco: muoviamo un personaggio con il joystick

    16 Luglio 2012 - 26 Comments

Author Description

5 Responses to “8. Particle Effect con cocos2d”

  1. 18 Settembre 2012

    08. Particle Effect | Corso gratuito di programmazione videogame per iPhone e iPad | Vivi Capena

    […] Insomma, argomento interessante e divertente, ma soprattutto meno complesso da implementare di quanto sembri. Pronti quindi a creare le vostre esplosioni? Allora non vi resta che correre a leggere e a sperimentare con la nuova lezione che trovate al seguente indirizzo. […]

  2. 18 Settembre 2012

    Acunamatata

    Ignazio… sei un grande… stavo proprio cercando questa cosa per l’app che sto sviluppando e ora posso studiarla senza copiare come un beone.

    Al di là dell’esigenza personale, complimenti per le lezioni del corso tutte veramente fantastiche e a prova di idiota.

  3. 18 Settembre 2012

    08. Particle Effect | Corso gratuito di programmazione videogame per iPhone e iPad | Tutto App

    […] Insomma, argomento interessante e divertente, ma soprattutto meno complesso da implementare di quanto sembri. Pronti quindi a creare le vostre esplosioni? Allora non vi resta che correre a leggere e a sperimentare con la nuova lezione che trovate al seguente indirizzo. […]

  4. 21 Novembre 2012

    8. Particle Effect con cocos2d | TCNews24.it

    […] il restodel post cliccando qui CCParticleSystem, corso cocos2d italiano, Corso programmazione videogiochi, creare videogame ios, […]

  5. 3 Dicembre 2012

    Marco

    Ciao, questo tutorial mi sembrava una figata e stavo provando a farlo. Ma quando sostituisco l’init della classe con quello che mi dici tu, vedo lo schermo completamente nero, perchè?

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO