Bienvenidos sean a este post, hoy agregaremos un efecto mas a nuestro juego de plataformas aunque sea una simpleza no deja de ser interesante.
Para comenzar seguiremos con nuestro proyecto y agregaremos un nuevo objeto que llamaremos obj_Transicion, una vez creado en la misma seccion donde tildabamos la opcion de solido debemos presionar la opcion Persistent para que este no solo sea creado en un room sino que sera pasado a los nuevos rooms donde trabajemos, lo siguiente sera agregar un evento Create y una vez creado agregaremos las siguientes lineas:
depth = -1000000;
alfa_fade = 0;
estado = 1;
fade_veloc = 0.05;
El primero es para definir la profundidad, en este caso usamos un valor muy exagerado porque asi estara muy por arriba de todos y no necesitamos andar haciendo grandes cambios en nuestras profundidades, la siguiente sera para hacer el desvanecimiento del alfa, por ahora lo dejaremos en 0, la siguiente sera para establecer un estado y por ultimo tendremos una para establecer la velocidad de nuestro desvanecimiento, pronto los utilizaremos, nuestro siguiente paso sera agregar un evento Draw y dentro de este agregaremos este codigo:
draw_set_color(c_black);
alfa_fade = clamp(alfa_fade + (fade_veloc * estado), 0, 1);
if (estado == 1 && instance_exists(obj_Pepe))
{
obj_Pepe.hspeed = 0;
obj_Pepe.vspeed = 0;
obj_Pepe.gravity = 0;
}
Primero estableceremos que el color sera negro, luego estableceremos el valor de alfa_fade por medio de clamp, esta funcion permite asegurarnos que se asigne un valor dentro de un rango y en este caso el primer valor sera el que estableceremos, el segundo es el valor minimo y el tercero el valor maximo, luego tendremos un condicional donde verificamos si estado es igual a 1 y que el obj_Pepe esta creado, en caso de ser verdadero procedemos a establecer en 0 las tres variables de este objeto, un detalle que no comente que el valor que asignaremos a alfa_fade sera establecido por el resultado del incremento del valor contenido en alfa_fade mas la velocidad de desvanecimiento (fade_veloc) por el estado, a continuacion agregaremos este condicional:
if (alfa_fade == 1 && estado == 1)
{
room_goto(global.room_destino);
estado = -1;
}
else if (alfa_fade == 0 && estado == -1)
{
instance_destroy();
}
En este condicional si alfa_fade llega a su valor maximo y estado es igual a 1 quiere decir que debemos cambiar de room y para ello usaremos a room_goto y le pasaremos el valor de global.room_destino (esta variable la definiremos en un momento) y seteamos a estado con el valor -1, despues tenemos un de lo contrario pero verifica si alfa_fade es igual a 0 y si estado es igual a -1 significa que debemos destruir el objeto de transicion por medio de instance_destroy, luego agregaremos el siguiente bloque:
draw_set_alpha(alfa_fade);
draw_rectangle(0,
0,
room_width,
room_height,
false);
draw_set_alpha(1);
La primera linea establece al alfa con el valor de alfa_fade, luego crearemos un rectangulo que cubrira toda la pantalla para hacer el efecto de transicion y por ultimo establecemos el valor de alfa en 1 porque de lo contrario puede generar errores o glitches al azar, con todo esto tenemos nuestro objeto terminado pero nos falta un par de modificaciones, la primera va a ser en nuestro objeto de inicio, obj_Inicio, dentro del evento Draw en el condicional donde verificamos la presion de las teclas, mas exactamente en que verificamos si se presiono Enter:
else if (keyboard_check_pressed(vk_enter))
{
switch(eleccion)
{
case 0:
room_goto(rm_main);
break;
case 1:
game_end();
break;
}
}
Lo modificaremos de esta manera:
else if (keyboard_check_pressed(vk_enter))
{
switch(eleccion)
{
case 0:
global.room_destino = rm_main;
instance_create_depth(
0,0,0,
obj_Transicion);
break;
case 1:
game_end();
break;
}
}
Basicamente lo unico que hicimos fue reemplazar el uso de la funcion room_goto por el establecer un valor para la variable global room_destino, en este caso pasamos a rm_main, y luego creamos la instancia de nuestro objeto de transicion, recuerden que este objeto espera por el valor de dicha variable global, nuestra siguiente modificacion sera en el objeto de pausa, obj_Pausa, donde buscaremos en el evento Draw e iremos al siguiente condicional:
if (keyboard_check(vk_enter))
{
switch(eleccion)
{
case 0:
instance_destroy();
break;
case 1:
room_goto(rm_setup);
break;
}
}
Al cual lo modificaremos de la siguiente manera:
if (keyboard_check(vk_enter))
{
switch(eleccion)
{
case 0:
instance_destroy();
break;
case 1:
global.room_destino = rm_setup;
instance_create_depth(
0,0,0,
obj_Transicion);
break;
}
}
Tecnicamente volvimos a hacer lo mismo que en el otro condicional pero esta vez en lugar de ir a rm_main iremos a rm_setup, con esta modificacion tenemos la transicion no solamente para ingresar a nuestro juego sino tambien para cuando volvemos al menu principal, con todo esto podemos compilar y probar nuestro juego para ver como quedo mediante el siguiente video
Como podemos ver en el video pudimos hacer de una manera practica un objeto para transicionar entre niveles o rooms y que puede ser reutilizable porque el mismo se adapta al tamaño de nuestros niveles pero este es un ejemplo de efectos que podemos agregar, antes de finalizar les adjunto el codigo de este proyecto por si lo quieren verificar:
En resumen, hoy hemos finalizado este proyecto no solamente con todo lo necesario para jugar, ya sea plataformas, enemigos, morir, notificaciones, generar una pausa, crear un menu de inicio, salir a ese menu de inicio y por ultimo cajas de textos y transiciones, espero les haya gustado tanto como a mi y recuerden que pueden seguirme 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
