Bienvenidos sean a este post, en el post de hoy agregaremos el objeto que representa a la nave del jugador.
En el post anterior generamos el sprite para nuestro objeto, junto con otros, y por eso debemos pasar al siguiente paso como es la creacion del objeto, al cual llamaremos obj_Nave, una vez creado le asignaremos el sprite correspondiente, spr_Nave, con esto realizado vamos a agregar nuestro primer evento el cual sera de tipo Create, dentro de este evento agregaremos estas dos lineas:
image_speed = 0;
puede_disparar = true;
La primer linea se encarga de detener la velocidad de las imagenes del sprite, sino estaria alternando constantemente, y la segunda es una variable para indicar la accion de su nombre pero de esto hablaremos mas adelante, con estas dos lineas explicadas pasemos a crear un nuevo evento de tipo Step -> Step, una vez generado vamos a agregar las siguientes dos lineas:
vel_hor = 0;
vel_vrt = 0;
Estas dos variables van a trabajar de la misma forma que el proyecto anterior porque se encargaran de la velocidad del eje X, en lugar de usar hspeed, y del eje Y, en lugar de usar vspeed, respectivamente y por ahora seran de valor 0, nuestro siguiente paso sera agregar las siguientes lineas:
if (keyboard_check(vk_up)) vel_vrt = -6;
if (keyboard_check(vk_down)) vel_vrt = 6;
if (keyboard_check(vk_up) && keyboard_check(vk_down))
vel_vrt = 0;
Estos condicionales verifican si presionamos las teclas de arriba y abajo, en el primer caso verifica si presionamos para arriba y en caso de ser cierto establece el valor de -6 (recuerden que arriba de todo es igual a 0) en la variable vel_vrt para desplazarnos hacia arriba, el siguiente condicional verifica si presionamos hacia abajo y en ese caso setea el valor de vel_vrt en 6 para desplazarnos hacia abajo, el ultimo condicional verifica si presionamos ambas teclas al mismo tiempo y en caso de suceder establece a vel_vrt con 0 deteniendo nuestro avance, ahora agreguemos las siguientes lineas:
if (keyboard_check(vk_left)) vel_hor = -6;
if (keyboard_check(vk_right)) vel_hor = 6;
if (keyboard_check(vk_left) && keyboard_check(vk_right))
vel_hor = 0;
Este es muy similar a los condicionales anteriores pero en este caso verificamos si presionamos a la izquierda o a la derecha, trabaja de forma similar estableciendo el valor de -6 para la izquierda y el valor de 6 para la derecha pero en este caso trabajamos con vel_hor y por ultimo tenemos un condicional donde verifica si presionamos ambas teclas al mismo tiempo y establece a vel_hor con el valor de 0 haciendo que se detenga, con esto comentado agregaremos el siguiente bloque:
if (vel_hor == 0)
{
image_index = 0;
}
else if (vel_hor > 0)
{
image_index = 1;
image_xscale = 1;
}
else
{
image_index = 1;
image_xscale = -1;
}
Este condicional se encargara de establecer cual imagen mostraremos, en el primero evaluaremos si vel_hor es igual a 0, esto equivale a decir que se esta desplazando hacia arriba o abajo o esta quieto por lo tanto mostrara la primera imagen del sprite, luego tenemos un condicional donde verificamos si vel_hor es mayor a 0 y por lo tanto equivale a que nos desplazamos a la derecha por lo tanto pasaremos a la segunda imagen del sprite y utilizaremos a image_xscale con el valor de 1 para que lo muestre tal cual es, por ultimo tenemos un else donde sera para cuando vel_hor sea menor a 0 y en este caso volveremos a usar la segunda imagen de nuestro sprite pero image_xscale sera de un valor -1 para indicar que usaremos un version espejada o invertida de esta, con esto hariamos el efecto de que se desplaza hacia la izquierda, con esto comentado agreguemos las siguientes lineas:
if (y + vel_vrt >= room_height || y + vel_vrt <= 0)
{
while(y + sign(vel_vrt) != room_height &&
y + sign(vel_vrt) != 0)
{
y += sign(vel_vrt);
}
vel_vrt = 0;
}
y += vel_vrt;
El primer condicional verifica si la suma del eje Y de nuestro objeto con vel_vrt es mayor o igual a la altura del room (room_height) o si la suma del eje Y con vel_vrt es menor o igual a 0, si se cumple alguna de las dos condiciones entra en el bloque donde tenemos un while donde verificamos si la suma anterior es distinta de room_height y distinta de 0, en este condicional volvemos a usar sign que nos devolvera 1 si el valor informado es positivo, -1 si es negativo y 0 si el valor es null o no fue informado, volviendo al condicional incrementamos con el valor devuelto al eje Y, en caso de ser negativo lo decrementa, en caso de no cumplirse este condicional lo omite y la siguiente linea establece a vel_vrt con 0 porque es la accion del primer condicional donde llegamos al tope o al final de la pantalla respectivamente y por ultimo incrementamos el valor del eje Y con el valor de vel_vrt, con esto ya tenemos establecido los limites para nuestro desplazamiento y por ultimo reflejaremos este desplazamiento, con esto explicado agreguemos el siguiente codigo:
if (x + vel_hor >= room_width || x + vel_hor <= 0)
{
while(x + sign(vel_hor) != room_width &&
x + sign(vel_hor) != 0)
{
x += sign(vel_hor);
}
vel_hor = 0;
}
x += vel_hor;
Este bloque es igual al anterior pero esta vez comparamos al eje X en lugar del eje Y, usamos el ancho del room en lugar del alto y usamos a vel_hor en lugar de vel_vrt pero su forma de trabajar es exactamente la misma a la anterior, con estos dos ultimos condicionales agregamos la posibilidad de desplazarnos por la pantalla, nuestro ultimo paso sera ir al room creado predeterminadamente donde agregaremos el objeto de la nave, traten de ubicarlo en la parte central inferior del mismo, les dejo un ejemplo de como lo ubique

Con todo esto realizado podemos proceder a compilarlo y probarlo, veamos como funciona hasta ahora mediante el siguiente video
Si lograron lo mismo que en el video, Felicitaciones!!! porque estamos yendo por el buen camino, si bien esto recien empieza no deja de ser un gran avance en todo lo que vinimos viendo hasta ahora.
En resumen, hoy hemos creado el objeto que sera la nave del jugador, hemos establecido el sprite del mismo, hemos establecido los parametros de la misma, ya sea para las teclas que se encargaran de moverlas asi como tambien de las condiciones para mostrar la imagen que corresponda, tambien hemos establecido los limites en el nivel y por ultimo lo hemos visto en accion por primera vez, 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.


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