Anuncios

Bienvenidos sean a este post, hoy continuaremos con nuestro tercer proyecto para empezar con los movimientos y las colisiones.

Anuncios

Para empezar vamos a nuestro objeto obj_Pepe y agregaremos un nuevo evento Create, una vez creado agregaremos las siguientes lineas:

gravity_direction = 270;
vspeed = 4;
Anuncios

La primera variable define en que direccion ira cuando actue la gravedad, esta variable no define a la gravedad en si, y si recuerdan cuando estuvimos hablando de las direcciones para desplazarnos, el valor de 270 era para indicar hacia abajo y esto es el mismo caso ya que indicamos para donde debe actuar la gravedad, la siguiente variable se encargara de iniciar a nuestra velocidad vertical al inicio, nuestro siguiente paso sera agregar un evento Step -> Step para comenzar a trabajar, una vez creado el evento vamos a agregar el siguiente bloque:

if (!place_free(x, y + 1))
{
	vspeed = -10;
}
Anuncios
Anuncios

En este condicional usaremos un viejo conocido como es place_free, esta funcion verifica que el jugador este en un lugar libre, es decir que no tenga contacto con nada o nadie, los parametros que pasamos son los valores del sprite de nuestro jugador, es decir que el x y el y son de spr_Pepe pero no corresponden al left y top sino que corresponden a left y bottom, como el y corresponde al bottom le sumamos 1 para que lo detecte antes de que coincida con el area de colision para evitar inconvenientes y malos efectos, con esto explicado sabemos que esta funcion devuelve siempre true hasta que ocurra la colision, por eso en el condicional ponemos el operador de negacion logica, para que en caso de devolver false proceda a ejecutar el bloque y en este caso establecemos el valor de vspeed en -10 lo cual hara que Pepe se desplace en una velocidad de 10 pixels para arriba, nuestro siguiente paso sera agregar un switch para controlar el desplazamiento de nuestro heroe, despues del condicional anterior agregaremos el siguiente bloque:

switch(keyboard_key)
{
	case vk_left:
		hspeed = -4;
		image_index = 0;
		break;
	case vk_right:
		hspeed = 4;
		image_index = 1;
		break;
	default:
		hspeed = 0;
		image_index = 2;
		break;
}
Anuncios
Anuncios

Este switch verifica cual tecla presionamos por medio de keyboard_key, como solo nos interesa que se presionen la flecha izquierda y la flecha derecha utilizamos a vk_left y vk_right respectivamente, lo que haremos en estos case sera setear el hspeed para el desplazamiento horizontal y asignaremos la subimagen que corresponda a nuestro desplazamiento, en este caso recuerden que el desplazamiento para la izquierda siempre va a ser negativo porque debemos reducir el valor de x, lo contrario para el desplazamiento a la derecha, y en este caso usamos a image_index para setearle la subimagen que corresponda, en mi caso la subimagen 0 corresponde al desplazamiento hacia la izquierda, la subimagen 1 corresponde al desplazamiento a la derecha y la subimagen 2 corresponde a cuando no tocamos ninguna tecla, y ahi entra en accion la opcion default donde establecera que hspeed sea igual a 0 y la imagen que corresponde, esto evitara que nuestro jugador se desplace mientras no presionemos ningun boton. con esto podemos probar nuestro juego pero notaremos una falla, cuando toquemos una plataforma nuestro heroe se ira infinitamente para arriba pero para poder resolver esto debemos modificar el condicional de chequeo de colision de la siguiente forma:

if (!place_free(x, y + 1))
{
	vspeed = -10;
	gravity = 0.5;
}
Anuncios

En este caso agregamos a gravity con un valor de 0.5, esta es una variable interna que actuara como una fuerza sobre direccion de la gravedad (gravity_direction) de la instancia, es decir que afectara tanto a la velocidad como a la direccion, como la gravedad es una fuerza acumulativa que afecta la velocidad si decidimos no aplicarla sucedera lo visto anteriormente y en general se utiliza valores decimales para hacer esto, les recomiendo siempre experimentar para adecuar las caidas a sus necesidades, solo nos resta un par de modificaciones mas, la primera sera ubicar las plataformas en Room1, les muestro una sugerencia de como lo hice mediante la siguiente imagen

Anuncios

Traten de ubicarlo en la manera que crean mas conveniente dado que por ahora lo haremos de esta manera pero mas adelante lo mejoraremos, nuestro siguiente modificacion sera ubicar al jugador en Room1, les muestro un ejemplo de como lo hice

Anuncios

Con estas dos modificaciones realizadas podemos probar nuestro juego, compilemos y veamos que sucede mediante el siguiente video

Anuncios

Con esto podemos ver nuestro primer gameplay de nuestro nuevo proyecto pero aun estamos lejos de lograr nuestro juego final.

Anuncios

En resumen, hoy hemos visto como agregar el movimiento y el rebote de nuestro jugador cada vez que toque una plataforma, hemos visto como establecer la direccion de la gravedad, tambien hemos visto como hacer que nuestro heroe salte cuando toca algo y como gravity evita que nuestro personaje salte al infinito y mas alla, tambien hemos visto como de una manera simple podemos detectar las teclas que tocamos para realizar el desplazamiento, 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

Donación

Es para mantenimento del sitio, gracias!

$1.00