16. Fuegos artificiales: mousePressed() y funciones auxiliares

Paso 4/5 de práctica 3 "Fuegos artificiales"

El programa del paso anterior funciona, pero draw() empieza a ser largo y difícil de leer: la lógica de crear chispas y la de moverlas están mezcladas en el mismo bloque. Antes de añadir más cohetes, vamos a limpiar el código extrayendo esa lógica a funciones auxiliares. Verás que un código más limpio es también más fácil de ampliar.

Extraer funciones: explotar() y gestionarChispas()

Creamos dos funciones auxiliares. Cada una recibe un cohete como parámetro (llamado c dentro de la función) y trabaja con sus propiedades:

../_images/javascript-eg-310.png

Nota

Localiza en el código que tenías antes de estas funciones y que ahora está dentro de ellas. Sustituye ese código por una llamada a la función correspondiente.

Ahora draw() queda mucho más corto y legible: solo describe el flujo general, sin entrar en detalles.

Varios cohetes con mousePressed()

Con el código limpio, dar el salto a varios cohetes es sencillo. Cambiamos cohete por un array cohetes = []. La función mousePressed() añade un cohete nuevo en cada clic. draw() los gestiona todos con un bucle for:

Array de objetos frente a arrays paralelos

En la práctica 2 teníamos px[], py[], pvx[], pvy[] y el índice i relacionaba los datos de la misma partícula. Aquí cada cohete lleva consigo todos sus datos agrupados: cohetes[i].x, cohetes[i].vy, cohetes[i].chispas… Al añadir una propiedad nueva — por ejemplo un tipo de explosión — solo hay que añadirla al objeto, sin crear un array paralelo nuevo.

El setup y draw

../_images/javascript-eg-311.png

Fíjate en ===

c.chispas.length === 0 usa triple igual. En JavaScript === compara valor y tipo a la vez, mientras que == solo compara el valor y puede dar resultados inesperados. Es buena práctica usar siempre === para comparar.