Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. GameMaker: Studio
Gamedevelopment

Dominar el sistema de partículas GameMaker Studio

by
Length:LongLanguages:

Spanish (Español) translation by Nadia Gonzales (you can also view the original English article)

En este artículo, comenzaremos con los conceptos básicos del sistema de partículas GameMaker Studio y terminaremos con técnicas e implementaciones avanzadas. Piensa en esto como un curso intensivo para familiarizarte y sentirte cómodo con una de las funciones integradas más poderosas de GameMaker Studio. El demo y archivo de proyecto descargable te permitirá seguir junto con el artículo para ver exactamente todo lo que el sistema de partículas es.

Resumen del sistema de partículas

El sistema de partículas GameMaker Studio es una forma barata y fácil de crear efectos llamativos para tu proyecto de juego. A través de una combinación de partículas y emisores, puedes crear rápidamente explosiones impresionantes, humo, sangre, metralla y muchos otros efectos. Se pueden lograr efectos similares utilizando objetos individuales, pero el costo de computación del sistema de efectos de partículas integrado es mucho más barato.

Para usar el sistema de partículas en tu proyecto, deberás comprender GML (Languaje GameMaker ), pero una vez que te familiarices con el sistema de partículas, es simplemente cuestión de completar los espacios en blanco y experimentación.

Echa un vistazo a la demostración a continuación para ver lo que podemos lograr:

Fundamentos del sistema de partículas

Los sistemas de partículas en GameMaker Studio constan de tres partes: el sistema en sí, la partícula y el emisor. Puedes crear múltiples sistemas, y cada sistema puede contener múltiples partículas y emisores. Piensa en el sistema como un contenedor, con las partículas y los emisores definidos dentro.

Implementar un efecto de partículas en GameMaker Studio es un proceso de cuatro pasos.

  1. Primero, debes definir el propio sistema de partículas.
  2. Luego, define las partículas reales que se utilizarán dentro de ese sistema.
  3. A continuación, debes definir el emisor que creará las partículas definidas.
  4. Finalmente, debes determinar cuándo y dónde aparecerá el emisor de partículas en tu juego.

Para enseñarte los conceptos básicos del sistema de partículas GameMaker Studio, comenzaremos creando este simple efecto de partícula verde.

Creando el sistema de partículas

Crear el sistema de partículas es tan simple como definir una variable. Creamos un objeto llamado obj_first_particle y colocamos el siguiente código en el evento de crear Objeto:

El sistema de partículas adoptará el valor de profundidad del objeto en el que se define el sistema, pero también puedes establecer la profundidad por separado con GML:

Recuerda que los objetos y los sistemas de partículas con un alto valor de profundidad se dibujan primero en la pantalla. Con una profundidad de 0, nuestro sistema de partículas verdes aparecerá sobre los objetos con una profundidad mayor que 0, y aparecerá debajo de los objetos con una profundidad menor que 0.

Los sistemas de partículas se dibujan en la pantalla con una posición base relativa a (0,0). Si por alguna razón deseas crear un desplazamiento para todas las posiciones futuras de este sistema de partículas, puedes usar el siguiente código para crear una nueva posición base (dondeind es el sistema de partículas):

Con una nueva posición base establecida en (10,10), una partícula creada en (25,25) se dibujará en (35,35). Cambiar la posición base de un sistema de partículas rara vez es necesario, pero puede que te resulte útil en tu proyecto específico.

Creando el tipo de partícula

Ahora que el sistema se ha configurado, es hora de definir la partícula real que creará el emisor. Las partículas pueden contener una gran cantidad de parámetros que determinan cómo se verá y se comportará. El primer paso es crear una variable para la partícula, y lo hacemos en el evento Create del objeto obj_first_particle:

A continuación, comenzamos a definir los parámetros individuales de la partícula. Como no planeamos alterar esta partícula durante el tiempo de ejecución, podemos colocar todo este código en el evento Create del objeto obj_first_particle.

part_type_shape determina la forma base de la partícula. Hay 14 formas predeterminadas de partículas disponibles en GameMaker Studio, y también puedes definir tus propias formas. Cubriremos esto en la sección avanzada a continuación, pero por ahora comencemos con un cuadrado básico.

Para obtener una lista completa de las formas predeterminadas disponibles, consulta la documentación oficial de GameMaker.

Con part_type_scale, podemos establecer los valores de base X y escala Y de la forma de la partícula. Como queremos una forma cuadrada perfecta, usamos el siguiente código:

part_type_size nos permite modificar el tamaño de la partícula al momento de la creación y también de forma posterior a esto. El formato para este código es part_type_size (ind, size_min, size_max, size_incr, size_wiggle).

  • ind es la variable de partícula.
  • size_min y size_max determinan el rango del tamaño de partícula cuando se crea por primera vez. Si deseas un tamaño uniforme, simplemente ingresa el mismo valor tanto para el mínimo como para el máximo.
  • size_incr es un valor que permite que la partícula crezca o se contraiga con el tiempo. Este valor determina la velocidad de crecimiento, por lo que si no quieres que tu sprite cambie de tamaño, puedes usar un valor de 0.
  • size_wiggle es un poco más complicado, así que lo cubriremos en la sección de técnicas avanzadas a continuación.

Aquí está el código de tamaño de partícula usado en nuestro efecto de partícula verde:

La partícula se creará con un tamaño entre 0,10 y 0,15 para crear variedad, y el sprite se reducirá lentamente a una velocidad de -0.001. Este valor de velocidad depende en gran medida de la velocidad de tu room, por lo que es probable que tengas que experimentar con valores para obtener los resultados deseados. No vamos a utilizar un cambio de ondulación, por lo que establecemos el valor en 0.

Las partículas en GameMaker Studio pueden cambiar de colores con el tiempo. Esto se logra con part_type_color2 y part_type_color3. Si no quieres que tu sprite cambie de color, entonces puedes usar part_type_color1. Para nuestro efecto de partícula verde, queremos que comience con un color amarillo/verde brillante y luego cambie a un color verde sólido, por lo que usamos part_type_color2:

Los dos colores que seleccioné son valores numéricos específicos que uso regularmente, pero si quieres usar valores hexadecimales más tradicionales, puedes usar el formato $RRGGBB.

Las partículas también pueden volverse más o menos transparentes con el tiempo con part_type_alpha2 y part_type_alpha3. Si quieres un valor alfa consistente, usa part_type_alpha1 Para nuestro efecto de partícula verde, queremos que la partícula comience a ser completamente opaca y se desvanezca en un 25% mientras permanece en la pantalla, por lo que necesitamos dos valores alfa:

En GameMaker, alfa es un valor de 0 a 1. Un objeto completamente invisible tendrá un valor alfa de 0, mientras que un objeto completamente opaco tendrá un valor alfa de 1.

La velocidad de la partícula se determina al igual que el tamaño de partícula. Las partículas se crean dentro de un rango de valores de velocidad, y ese valor puede aumentar o disminuir. El formato para este código es part_type_speed (ind, speed_min, speed_max, speed_incr, speed_wiggle), donde ind es la variable partícula, speed_min y speed_max es el rango de velocidad, speed_incr es la velocidad a la que cambia la velocidad de las partículas y speed_wiggle es un parámetro que cubriremos más adelante.

El código de velocidad para nuestra partícula verde es:

Nuestra partícula comenzará a moverse con un valor de velocidad en algún punto entre 0.1 y 0.5. Esta velocidad se mantendrá constante, por lo que usamos un valor de 0, y de nuevo no implementaremos el cambio de velocidad de ondulación, por lo que usaremos un valor de 0.

Mientras que el parámetro de velocidad de una partícula determina qué tan rápido se mueve, el parámetro de dirección determina dónde se mueve. El código de dirección está en el siguiente formato: part_type_direction (ind, dir_min, dir_max, dir_incr, dir_wiggle) y nuevamente establecemos la variable, el rango de inicio, un valor incremental y un valor de ondulación. Para el efecto de partícula verde, queremos que nuestra partícula comience a moverse en cualquier dirección, y queremos que esa dirección permanezca constante:

El rango de 0 a 359 garantiza que la partícula tenga la posibilidad de moverse en cualquier dirección (un ángulo entre 0 y 359 grados). Si quisieras que una partícula se moviera hacia arriba y solo hacia arriba, entonces deberías usar un rango de 90 a 90).

La gravedad de nuestro efecto de partículas es lo que lo hace más interesante. Mientras que nuestros parámetros de velocidad y dirección están configurados para crear una partícula que comienza moviéndose en una dirección a una velocidad constante, el parámetro de gravedad se activa y altera la partícula según pasa el tiempo. Con el formato de part_type_gravity (ind, grav_amount, grav_direction), el parámetro de gravedad es muy simple:

Al aplicar un ligero tirón gravitacional de 0.02 en una dirección hacia arriba (90 grados), podemos crear una partícula que parece flotar. Combinado con nuestro tamaño y parámetros alfa, la partícula se encoge y se vuelve más transparente con el tiempo, acompañada por la elevación gravitatoria.

La orientación de la forma de la partícula también es importante para la apariencia del efecto, por lo que usamos part_type_orientation (ind, ang_min, ang_max, ang_incr, ang_wiggle, ang_relative) para rotar el cuadrado con el tiempo.

  • ind es la variable de partícula.
  • ang_min y ang_max determinan el valor de inicio del valor de rotación de la forma.
  • ang_incr se utiliza para aumentar o disminuir la orientación de la forma a lo largo del tiempo.
  • ang_relative es un valor booleano para determinar si la orientación debe establecerse en relación con el movimiento de la partícula (verdadero) o no (falso).

Queremos que nuestra partícula verde gire ligeramente hacia la izquierda, así que usamos el siguiente código:

Uno de los parámetros más importantes de una partícula es el valor de la vida útil. Este valor determina el tiempo mínimo y máximo en que una partícula se dibujará en la pantalla. Con dos valores mínimos y máximos idénticos, todas las partículas de ese tipo existirán durante la misma cantidad de tiempo. Queremos que nuestras partículas verdes tengan variedad, por lo que usaremos un rango de 100 a 150 para el valor de la vida útil:

El parámetro final para las partículas es un booleano simple para determinar si las partículas deben mezclarse con un efecto de mezcla aditiva:

Creando el emisor de partículas

El primer paso para definir un emisor es crear una variable. Definimos este emisor en el evento Crear del objeto obj_first_particle.

A continuación, definimos la región del emisor con part_emitter_region(ps, ind, xmin, xmax, ymin, ymax, shape, distribution).

  • ps es el sistema de partículas al que pertenece el emisor e ind es la variable del emisor.
  • Los valores de x e y min y max determinan el tamaño de la región del emisor.
  • shape determina la forma de la región del emisor (ps_shape_rectangle, ps_shape_ellipse, ps_shape_diamond, ps_shap_line).
  • distribution es una curva de distribución (ps_dist_linear, ps_distr_gaussian, ps_distr_invgaussian).

Cubriremos los parámetros de forma y distribución con más detalle en la sección de técnicas avanzadas. Por ahora, usaremos la forma de elipse predeterminada y los valores de distribución de Gauss:

Este código crea una región de emisor elíptica que tiene 40 píxeles de alto y 40 píxeles de ancho, y se centra en los valores x e y del objeto obj_first_particle. Las partículas creadas por el emisor aparecerán dentro de esta región definida.

Activando el Emisor de Partículas

El siguiente paso es determinar uno de los dos tipos de emisores: Burst o Stream. Un emisor burst crea una cantidad específica de una determinada partícula cada vez que se activa. Un emisor stream crea una cantidad específica de una determinada partícula una vez en cada paso.

Echaremos un vistazo a los emisores burst más versátiles en la sección de técnicas avanzadas, así que por ahora solo utilicemos el emisor Stream:

Colocamos este código en el evento Create del objeto obj_first_particle, lo que hace que el emisor cree una partícula en cada paso tan pronto como se crea el objeto. Con una velocidad room de 30, nuestro emisor creará 30 partículas por segundo; para crear 60 partículas por segundo, simplemente usarías un valor de 2 en lugar de 1.

Y con eso, ¡nuestro efecto simple de partículas verdes está completo! La utilidad de este efecto es limitada, pero es importante comenzar poco a poco antes de sumergirse en los aspectos más complicados del sistema de partículas GameMaker Studio. Una vez que comprendas los conceptos básicos del sistema de partículas, puedes comenzar a implementar sistemas de partículas más avanzados.

Técnicas avanzadas de sistemas de partículas

Ondulación de particulas

Wiggle es un parámetro simple pero poderoso que puede cambiar drásticamente la apariencia de tus partículas. Este hace que la partícula oscile entre los valores mínimo y máximo durante su vida útil. El valor puede estar entre 0 y 20 y determina la velocidad de la ondulación.

El ejemplo de "Fire Bubble" en la demostración incorporada usa un valor variable de 0.40 en el parámetro part_type_size:

Emisores Burst y objetos en movimiento

Una de las implementaciones más comunes de los sistemas de partículas involucra partículas que emanan de detrás de un objeto en movimiento, como un rastro de humo en un cohete. Para lograr este efecto en GameMaker Studio, es necesario colocar un emisor Burst en el evento Step de un objeto.

El ejemplo incluido utiliza el mismo sistema de partículas verdes de antes, pero con un emisor ligeramente modificado. En lugar de activar un emisor Stream en el evento Create del objeto, se coloca un emisor Burst en el evento Step del objeto. La posición actual del cursor del mouse se compara con la posición anterior del cursor, y si hay un cambio en la posición del cursor, el emisor Burst se activa para liberar cinco partículas:

Formas de la región del emisor

Al utilizar las diferentes formas de emisores y las curvas de distribución, puedes crear efectos muy diferentes. La distribución de la curva lineal combinada con un emisor de partículas en forma de línea puede crear un efecto de lluvia convincente.

La forma del emisor se define por una línea que comienza 100 píxeles a la izquierda del origen de la room y se extiende hasta el ancho de la room. Se utiliza una curva de distribución lineal para distribuir las partículas de lluvia uniformemente en la región del emisor. También es útil usar part_system_update para hacer avanzar la partícula de lluvia varios pasos en el evento Create. Este código da la impresión de que la lluvia caía antes de cargaras la room, aunque el sistema de partículas todavía no existía en la memoria.

Efectos de paso y muerte del sistema de partículas

Las partículas individuales dentro de un sistema también pueden generar otras partículas en los eventos Step y Death. El ejemplo muestra una partícula de chispa púrpura que genera partículas de polvo más pequeñas a medida que viaja hacia la derecha y genera una partícula de humo al final de su vida útil:

Formas de partículas personalizadas

Al usar part_type_sprite (ind, sprite, animate, stretch, random), puedes usar sprites personalizados en lugar de los tipos de partículas incorporados de GameMaker.

  • ind es la variable de partícula.
  • sprite es la variable sprite que se utilizará.
  • animate es un booleano para determinar si las subimágenes deben ser animadas.
  • stretch es un booleano que combina la duración de la animación con la vida útil de la partícula.
  • random es un booleano para determinar si la subimagen inicial debe seleccionarse al azar.

Gestión de la memoria

Lo más importante que debes recordar sobre el sistema de partículas de GameMaker Studio es que debes eliminar manualmente los elementos de la memoria cuando no estén en uso. A diferencia de los objetos de juegos estándar, los sistemas de partículas permanecerán en la memoria incluso si cambias de rooms. La forma más fácil de manejar esto es colocar el código de administración de memoria en los eventos de cambio de room de los objetos de tu juego.

  • part_system_clear (ind): borra todos los emisores y partículas que pertenecen a un sistema de partículas específico.
  • part_system_clear (ind): borra todas las instancias de un tipo de partícula específico.
  • part_emitter_clear (ps, ind): borra todas las partículas que pertenecen a un emisor específico.
  • part_emitter_destroy (ps, ind): destruye un emisor específico en un sistema de partículas específico.
  • part_emitter_destroy_all (ps): destruye todos los emisores en un sistema de partículas específico.
  • part_type_destroy (ind): destruye un tipo de partícula específico.
  • part_system_destroy (ind): destruye todo un sistema de partículas, incluidas todas las partículas y emisores que contiene.

Conclusión

Incluso con un tutorial tan extenso, solo hemos arañado la superficie de los tipos de efectos que puede realizar el sistema de partículas GameMaker Studio. La clave para dominar las partículas es la familiaridad y la experimentación, así que anda y comienza a crear tus propios efectos utilizando el conocimiento que has adquirido. ¡Asegúrate de consultar la documentación oficial de GameMaker para ver todos los sistemas de partículas GML disponibles!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.