Bienvenidos sean a este post, hoy veremos un uso mas avanzado sobre las particulas y daremos los ultimos detalles sobre nuestro juego.
Vamos a comenzar creando un fondo para nuestro juego, en este caso haremos una imagen por fuera del editor de sprites de un tamaño de 512×384, les dejo un ejemplo

Una vez generado nuestro archivo que usaremos para fondo de pantalla, vamos a generar un nuevo sprite, al cual llamaremos spr_fondo_pantalla, una vez generado presionamos el boton Import, vamos a donde esta la imagen que creamos, la seleccionamos, nos preguntara si deseamos hacerlo le damos que si y este se ajustara automaticamente, nuestro siguiente paso sera ir al Room Editor, la mejor opcion es abrir el Room de nuestro juego (Room1), y en el margen superior izquierdo tendran varias opciones, seleccionen Background y nos habilitara la siguiente opcion

Debemos presionar la opcion que dice No Sprite, nos abrira una ventana con la carpeta Sprites, si ingresan tendran todos los sprites del juego y en este caso seleccionaremos el sprite que creamos anteriormente, una vez seleccionado presionen Horizontal Tile y Vertical Tile para activarlos, con todo esto realizado obtendremos el siguiente fondo

Con esto tenemos el fondo de nuestro juego generado sino quieren hacer el dibujo les dejo el archivo para que lo descarguen y lo usen:
El siguiente tema seran las particulas para nuestra nave porque esta todo bien con el tema de las explosiones de nuestros enemigos pero y nosotros? Asi que ahora agregaremos esto.
Para esto debemos ir al objeto de nuestra nave, obj_Nave, pero en este caso no necesitamos modificar a Create sino simplemente agregar el evento Destroy, una vez creado usaremos el siguiente codigo:
part_particles_create(global.ps, x - (sprite_width/2) - 8,
y, global.pt_explosion, 1);
En este caso usamos el mismo codigo para generar las particulas que usamos para los enemigos en general pero la unica diferencia va a estar que en lugar de usar a particula para identificar cual explosion a utilizar pasamos directamente a global.pt_explosion porque no necesitamos diferenciar entre los dos tipos de explosiones, nuestra siguiente modificacion sera lo que nos trajo a este post como son el manejo de particulas un poco mas avanzado.
En este caso vamos a generar una lluvia, antes de comenzar crearemos el sprite para la lluvia y para ello generamos un sprite de 4 x 4, la llamaremos spr_lluvia, para su creacion usaremos el editor interno para crearlo, les dejo un ejemplo

Nuestro siguiente sera el codigo para implementarla, para ello debemos ir al objeto encargado de las particulas, obj_Particulas, en el evento Create debemos agregar el siguiente codigo entre la definicion de global.ps y la creacion de las explosiones de particulas:
em = part_emitter_create(global.ps);
part_emitter_region(global.ps, em, 0, room_width, -16,
0, ps_shape_rectangle, ps_distr_linear)
En la primer linea definiremos una variable llamada em para que sea el emisor de nuestras particulas por medio de part_emitter_create al cual le informamos el indice que usara, por ultimo establecemos la region que debe usar para crear a las nuevas particulas o lluvia en este caso, hablemos sobre cada uno de los parametros que pasamos:
- El primero sera el sistema de particulas existente
- El segundo es el emisor o indice que usaremos
- El tercero es el valor left del eje X
- El cuarto es el valor right del eje X
- El quinto es el valor de top del eje Y
- El sexto es el valor de bottom del eje Y
- El septimo es el tipo de distribucion que usaremos
- El ultimo es la forma de distribucion
Los dos primeros parametros son los que generamos anteriormente, los cuatro parametros son los mismos a cuando hablamos de los rectangulos tanto de colision como de creacion, por ultimo tenemos dos parametros propios de esta funcion, la primera sera para saber como se hara la distribucion de la misma veamos los valores posibles:
- ps_shape_rectangle, una forma rectangular que llena el area informada
- ps_shape_ellipse, una forma circular con un alto y ancho definida por el area informada
- ps_shape_diamond, una forma de diamante que apunta a la mitad del ancho y alto informados
- ps_shape_line, una linea que comienza desde el left-top y finaliza en el right-bottom
Y el ultimo parametro es como se hara el movimiento a la distribucion definida en el parametro anterior y para este caso tambien disponemos de estas posibilidades:
- ps_distr_linear, una distribucion donde todas las particulas tienen la misma posibilidad de aparecer
- ps_distr_gaussian, en esta las particulas tienen mas posibilidades de aparecer en el centro que los bordes
- ps_distr_invgaussian, el contrario del anterior, es decir que los bordes tienen mas posibilidad que el centro
Con esto ya tenemos creado como se van a emitir nuestras particulas de lluvia, ahora solo nos resta crearlas y para ello haremos algo similar a cuando creamos las dos explosiones y para ello agregaremos el siguiente bloque despues del bloque de la gran explosion:
pt_lluvia = part_type_create();
part_type_sprite(pt_lluvia, spr_lluvia, false, false, false);
part_type_speed(pt_lluvia, 2, 2.5, 0.2, 0);
part_type_direction(pt_lluvia, 270, 270, 0, 0);
part_type_life(pt_lluvia, 300, 300);
La primera linea se encargara de crear una variable donde almacenara el tipo de particulas que creara para esta ocasion la cual usaremos para la lluvia, la siguiente linea sera para definir el tipo de sprite que usaremos, primero pasaremos cual particula usaremos, luego pasamos el sprite a utilizar, el tercer parametro define si usamos la animacion del mismo, el cuarto para definir si ajustaremos la animacion a la duracion de la particula y la ultima es para decirle que elija de forma random alguna sub-imagen del sprite, para esta ocasion queremos que no haga nada de eso por lo tanto usamos false, en caso de necesitar algo de lo descripto anteriormente usaremos a true, la siguiente linea establece la velocidad de nuestra particula y para ello usaremos los siguientes parametros:
- El indice de las particulas que usaremos
- La velocidad minima
- La velocidad maxima
- El indice de incrementacion del mismo
- Cuanto se debe agregar o quitar de forma al azar a medida que se incrementan los pasos
Con estos valores establecidos la siguiente linea establece cual es la direccion que debera seguir nuestra particula y para ello tenemos los siguientes parametros:
- El indice de las particulas que usaremos
- La direccion minima con la cual comenzara la particula
- La direccion maxima con la cual comenzara la particula
- La cantidad con la cual incrementara o decrementara la direccion
- Cuanto se debe agregar o quitar de forma al azar a medida que se incrementan los pasos
Como pueden observar no incrementamos en ningun momento y siempre le decimos que se dirija hacia abajo, la ultima linea es para establecer la duracion de las particulas, como en los casos anteriores primero pasaremos el indice de las particulas, luego el valor minimo de la vida util de la misma y el siguiente valor sera el valor maximo de la vida util de la misma, con esto tenemos concluidas las nuevas particulas para mostrar una lluvia durante el juego, vamos a nuestro evento Game End y agregaremos las siguientes lineas antes de la destruccion del sistema de particulas:
part_type_destroy(pt_lluvia);
part_emitter_destroy(global.ps, em);
La primera sera para eliminar a nuestras particulas de lluvia y la siguiente sera para eliminar al emisor o emitter, el evento debe quedar de la siguiente forma:
part_type_destroy(global.pt_explosion);
part_type_destroy(global.pt_gran_explosion);
part_type_destroy(pt_lluvia);
part_emitter_destroy(global.ps, em);
part_system_destroy(global.ps);
Por ultimo debemos agregar un evento Step -> Step, una vez generado le agregaremos la siguiente linea:
part_emitter_stream(global.ps, em, pt_lluvia, 5);
Esta linea se encarga de usar el emisor que definimos en Create donde primero recibe el sistema de particulas, luego el emisor, despues el tipo de particulas y por ultimo el numero de particulas que debe crear por cada paso, con esto tenemos realmente completa nuestra lluvia, con esto ya podemos pasar a probar nuestro pero antes debemos hacer una ultima modificacion.
Mas que una modificacion obligatoria es una recomendacion, en este caso note que entre los disparos de los enemigos, el fondo y la lluvia no habia mucha diferencia por lo tanto decide modificar el sprite de los lasers enemigos de la siguiente forma

Simplemente lo modifique a un color rojo para diferenciarse con el resto, pueden hacerlo o no pero yo les recomiendo hacerlo, con esto realizado podemos pasar a probar nuestro juego para ver como finalmente quedo mediante el siguiente video
En el video podemos ver nuestro juego terminado con todos los enemigos, un fondo, la lluvia, las explosiones y mi victoria!, aqui abajo les dejo un archivo con el proyecto terminado para que puedan verlo compararlo y ver como les fue durante las lecciones:
En resumen, hoy hemos terminado nuestro quinto proyecto, un juego muy completo y versatil si bien posee alguna dificultad puede que el proyecto anterior haya sido un poco mas complejo pero este quedo mas monono, hemos visto como utilizar a las particulas con otra variante como son los sprites, hemos visto como utilizar un emisor y sus distinas opciones, espero les haya gustado tanto como a mi 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.


Donación
Es para mantenimento del sitio, gracias!
$1.00
