En este capítulo veremos cómo utilizar y crear sistemas de partículas como los empleados cuando una bala golpea al jugador, hay infinidad de herramientas pero una vez más de pago, sin embargo para sistemas de partículas en 2d con cocos, podemos utilizar la web particle2dx, una web para generar sistemas de partículas compatibles con cocos.
Además de aprender a usar sistemas de partículas crearemos algunos upgrades y nuevos enemigos. Las imágenes para estos nuevos componentes ya están integradas en los spritesheets que se descargaron en el capítulo 8. Así que basta con que descargues las clases empleadas en este capítulo aquí.
Como pudimos ver en la clase player se añadieron varias funcionalidades extra, entra ellas aparece la clase ParticleSystemQuad que nos permite renderizar el sistemas de partículas en formato .plist generados con la web mencionada anteriormente. Para crear las partículas usamos _hitEffect = ParticleSystemQuad::create("impact.plist") este sistemas de partículas puede pararse, reproducirse y resetearse. La duración del sistema de partículas ha de indicarse en el momento de la edición en este caso se reproduce una única vez y luego desapareen las partículas. Vemos como se usa en el método runHitEffect de la clase Player.
Este método se ejecutará cuando una bala golpee al jugador y entre otras cosas, podemos ver cómo se hace un _hitEffect->resetSystem() para que el sistema de partículas se ejecute.
Ya conocemos el funcionamiento de los sistemas de partículas, ahora veremos algunas clases que hacen uso de ellos, pero antes vamos a ver otro método interesante de la clase player. Queremos que cuando el player entre en contacto con algún objeto especia, un upgrade, este cambie su tipo de bala, de una bala inicial a otro tipo que haga más daño o tenga una imagen diferente. Para esto hemos creado el siguiente método.
Este método nos permitirá actualizar las balas de nuestro jugador, recibe como parámetro una función que creará el tipo de bala concreto, entonces el método hace que la nave deje de disparar, elimina de la escena las balas viejas y añade las nuevas y posteriormente reactiva el disparo de la nave. Este método es importante pues los componentes "upgrade" proveerán la función que creará uno u otro tipo de bala vemos cómo.
Ahora vamos a ver el componentes PlayerUpgradeParticle
La clase no hace nada que no conozcamos, esta clase guarda una referencia a la clase Player y en su método update además de ir hacia abajo, verifica si colisiona o no con este, al igual que las balas de los enemigos, solo que si colisiona con el jugador, llama a su método updateBullets y le pasa como función de creación de balas la suya propia. La función se llama createBullet si nos fijamos en el .h virtual PlayerBullet* createBullet() vemos que esta función es virtual lo que quiere decir que futuras clases derivadas de esta podrán sobrescribir únicamente esta función y proveer un nuevo tipo de bala (véase PlayerUpgradeParticle2).
Además de los upgrades, incluimos dos tipos nuevos de bala para el jugador y un nuevo tipo de bala para los enemigos, veamos la bala nueva para enemigos pues tiene una funcionalidad un tanto distinta a la vista hasta ahora.
Este tipo de bala hereda de EnemyBullet y se diferencia d su clase padre sobre todo en la funcionalidad, fíjate en el método setVisible donde creamos una acción moveTo donde le indicamos a la bala que se dirija a la posición X del jugador en el momento de ser disparada la bala, con alguna restricción.
En el método update como siempre verificamos las colisiones y si debemos desactivar la bala.
El resto de componentes no son mucho más complejos que estos con lo que con echar un vistazo a su código se entenderán. Pasemos ahora al siguiente capítulo donde veremos cómo utilizar algunos de estos componentes.