Anuncios

Bienvenidos sean a este post, hoy veremos el ultimo elemento de nuestro quinto juego como son las particulas para el impacto en nuestra nave y/o enemigos.

Anuncios

Las particulas son una caracteristica de GameMaker que nos permite crear una explosion sin necesidad de manejar objetos, sprites o elementos de otra indole que afecten a nuestra performance, es decir que esto nos posibilita tener un efecto interesante sin sobrecargar al CPU, tambien nos permite crear pequeñas o grandes explosiones para cubrir todas nuestras necesidades, para ponerlo en practica trabajaremos sobre nuestro proyecto EspacioX.

Anuncios

Nuestro siguiente paso sera crear un nuevo objeto al cual llamaremos obj_Particulas, una vez creado el objeto le agregaremos un evento Create y dentro de este usaremos el siguiente codigo:

global.ps = part_system_create();

global.pt_explosion = part_type_create();
part_type_shape(global.pt_explosion, pt_shape_explosion);
part_type_size(global.pt_explosion, 0.15, 0.2, 0.1, 0);
part_type_scale(global.pt_explosion, 0.5, 0.5);
part_type_color3(global.pt_explosion, c_orange, c_red, c_gray);
part_type_life(global.pt_explosion, 30, 60);

global.pt_gran_explosion = part_type_create();
part_type_shape(global.pt_gran_explosion, pt_shape_explosion);
part_type_size(global.pt_gran_explosion, 2, 5, 0.5, 0);
part_type_scale(global.pt_gran_explosion, 0.5, 0.5);
part_type_color3(global.pt_gran_explosion, c_orange, c_red, c_gray);
part_type_life(global.pt_gran_explosion, 60, 90);
Anuncios
Anuncios

La primera linea utiliza una variable global interna del lenguaje como es global.ps la cual se encargara de recibir el valor devuelto por part_system_create, la siguiente linea sera una variable global igual a la anterior pero esta vez sera para la creacion de la explosion normal, las siguientes lineas se encargaran de darle forma. La primera sera para darle el tipo de forma a la explosion, el primer dato que le pasamos es el valor que definimos anteriormente y despues uno de los distintos formatos que disponemos pero para la ocasion usaremos la explosion, la siguiente linea se encarga de definir el tamaño de la misma con los siguientes parametros:

  • El primero sera el indice que generamos
  • El segundo es el tamaño minimo
  • El tercero es el tamaño maximo
  • El cuarto es para indicar cuanto aumenta o disminuye por los pasos
  • El quinto es para indicar cuantas particulas se deben adicionar o sustraer por cada paso
Anuncios
Anuncios

La siguiente linea sera para definir la escala de nuestra explosion, para ello primero pasamos el indice de cual explosion, luego que escala usara para el eje X y despues la escala del eje Y, en este caso usaremos el radio que queramos, por ejemplo para que sea 1:1 debemos pasar el valor 1, si queremos que sea la mitad pasaremos el valor de 0.5 (como se ve en el ejemplo) y en el caso del doble pasamos el valor de 2, despues tendremos todos los valores que queramos dependiendo de las necesidades nuestras, nuestro siguiente paso sera informar tres colores de nuestra explosion, al igual que antes pasamos el indice que queremos pintar y luego los tres colores para pintarlos, por ultimo tenemos la vida o duracion de la misma donde informamos nuevamente el indice y por ultimo el minimo y el maximo de pasos para la misma.

Anuncios

La siguiente explosion que generamos es para una GRAN explosion y volvemos a usar las mismas instrucciones pero la diferencia esta en los valores del tamaño y de la vida del mismo pero el resto son exactamente iguales, con esto tenemos los dos tipos de explosiones creados pero como las particulas son elementos de tipo dinamico debemos eliminarlo una vez utilizado y para ello debemos agregar el evento Game End, este se encuentra en Other -> Game End, una vez agregado vamos a utilizar el siguiente codigo:

part_type_destroy(global.pt_explosion);
part_type_destroy(global.pt_gran_explosion);
part_system_destroy(global.ps);
Anuncios

Este se encargara de eliminar toda evidencia, para ello primero elimina al indice que tenga la explosion pequeña y luego la grande para finalmente liberar a global.ps, con esto ya tenemos nuestro objeto creado y podemos pasar al siguiente paso pero antes agreguen este objeto dentro del room, tal como hicieron con el objeto de control (obj_control).

Anuncios

La siguiente modificacion la haremos en el objeto padre clase_enemigo donde agregaremos un evento Destroy y una vez generado le agregaremos la siguiente linea:

part_particles_create(global.ps, x - (sprite_width/2) - 8, 
	y, particula, 1);
Anuncios
Anuncios

Esta se encargara de generar las particulas pero en base a las que nosotros almacenamos en global.ps, despues tenemos los valores para ubicarlo con respecto a nuestro objeto, tambien tenemos una variable de la cual luego hablaremos, por ultimo pasamos la cantidad de particulas que queremos crear y le pasamos una sola, para nuestra siguiente modificacion debemos ir al objeto del laser del enemigo, obj_laser_enemigo, y en nuestro evento Destroy heredado debemos hacer click con el boton derecho y seleccion Override Event, esto como hicimos en un caso anterior borrara la herencia de clase_enemigo y lo dejaremos en blanco, esto lo haremos asi porque no queremos una saturacion de explosiones ya sea porque destruimos uno o se destruyan cuando eliminemos al jefe pero lo dejamos porque en un futuro podemos necesitarlo, tambien podemos borrar todo el contenido pero si lo dejan en blanco al momento de compilarlo si no posee nada sera borrado para no desperdiciar memoria, si lo miran despues del override quedaran unos comentarios y debe quedar de esa forma, con esto tenemos todo lo relacionado a cuando debe aparecer la explosion pero todavia nos falta un paso mas.

Anuncios

Para este tema debemos ir al objeto de enemigo normal, obj_Enemigo, ir al evento Create y agregar el siguiente bloque:

particula = -1;
if (part_type_exists(global.pt_explosion))
{
	particula = global.pt_explosion;
}
Anuncios

Esta es la variable que mencionamos anteriormente para cuando trabajamos con la creacion de las particulas en el momento de la destruccion de la clase_enemigo, este es un valor para iniciar nuestra variable y que no nos devuelva ningun error, luego tenemos un condicional donde verifica si estas particulas existen y en caso de ser verdad asignamos el indice en global.pt_explosion a particula, ya entenderemos porque debemos hacer esto, lo siguiente sera desplazarnos al evento Step y al comienzo del mismo pero por debajo de event_inherited agregaremos el siguiente codigo:

if (particula == -1 && part_type_exists(global.pt_explosion))
{
	particula = global.pt_explosion;
}
Anuncios

En este caso chequearemos si particula es igual a -1 y existe un indice en global.pt_explosion, en caso de ser verdadero volvemos a definir a particula con el valor de global.pt_explosion, con esto tenemos casi todo cocinado solo nos falta un dato mas porque si lo probamos ahora nos devolvera un error cuando ejecute la explosion.

Anuncios

Para corregir este error debemos ir a obj_control y en el inicio del evento Create agregaremos la siguiente linea:

global.pt_explosion = -1;
Anuncios

Esto es debido a que no necesariamente se hayan iniciado las particulas por lo tanto al momento de intentar llamarlas o asignarlo a particula puede generar un error y con esto estariamos controlando dicho error, con todo esto podemos proceder a probar nuestro juego y deberia funcionar pero todavia nos faltan dos elementos como son los misiles y el jefe para agregarle las particulas vamos a tomar al objeto del misil, vamos al evento Create y agreguemos las siguientes lineas:

particula = -1;
if (part_type_exists(global.pt_explosion))
{
	particula = global.pt_explosion;
}
Anuncios

Este es exactamente el mismo codigo que agregamos al enemigo comun, pasemos al evento Step y agregaremos el siguiente codigo al comienzo del mismo:

if (particula == -1 && part_type_exists(global.pt_explosion))
{
	particula = global.pt_explosion;
}
Anuncios

Al igual que en el caso del enemigo debe ir despues de event_inherited y tambien hace exactamente lo mismo que en el caso del enemigo, nuestra ultima modificacion sera para el jefe, para ello debemos ir al objeto del mismo y en el evento Create agregaremos el siguiente codigo:

particula = -1;
if (part_type_exists(global.pt_gran_explosion))
{
	particula = global.pt_gran_explosion;
}
Anuncios

Este codigo es exactamente igual a los anteriores pero con una excepcion, en este caso en lugar de usar global.pt_explosion usaremos a global.pt_gran_explosion, esto es debido a que debemos diferenciar de las otras naves mas pequeñas, recuerden que es el “Vic Boss”, pero la conducta es exactamente la misma, la otra diferencia con respecto a los anteriores casos es que debe estar antes del llamado a event_perform, por lo tanto el codigo de este evento quedara de la siguiente manera:

randomize();
ps = 200;
alarma_num = 120;
particula = -1;
if (part_type_exists(global.pt_gran_explosion))
{
	particula = global.pt_gran_explosion;
}
event_perform(ev_alarm, 0);
Anuncios

Con esto aclarado podemos pasar a la modificacion en el evento Step para finalizar con todas nuestras modificaciones por ahora, en este caso volveremos a agregar el siguiente codigo al comienzo del evento:

if (particula == -1 && part_type_exists(global.pt_gran_explosion))
{
	particula = global.pt_gran_explosion;
}
Anuncios

Y al igual que en los casos anteriores trabaja de la misma forma pero la unica diferencia es que utilizaremos a global.pt_gran_explosion, con esto realizado podemos pasar a probar nuestro juego para ver los resultado de estas modificaciones:

Anuncios

En el video podemos ver todo el progreso que realizamos en el juego, podemos observar las distintas explosiones y tambien como no lo hace con los lasers, por ultimo podemos ver la gran explosion del jefe y como se destruye a todos los enemigos cercanos pero el unico que nos quedo lejos del rango de la misma sobrevivio para luego morir y darnos el cartel de victoria.

Anuncios

En resumen, hoy hemos visto una mecanica propia del GameMaker para generar particulas, la cual nos ahorra muchos dolores de cabeza para no tener que generar un objeto o sprite para este evento, tambien nos permite no sobrecargar al cpu innecesariamente y facilitando nuestras tareas en ciertos aspectos, hemos visto un concepto base para poder utilizarlo y que no sera muy distinto al que puedan implementar en otros proyectos, espero les haya gustado sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.00