Anuncios

Bienvenidos sean a este post, hoy veremos como aplicar las fisicas en un juego “real” y para ello crearemos un nuevo proyecto muy parecido al primero que hicimos.

Anuncios

Para comenzar vamos a crear un nuevo proyecto de tipo GML, al cual llamaremos ElCalabozo2.5, con nuestro proyecto creado tenemos dos posibilidades: generamos los sprites o los importamos desde el proyecto original, aqui abajo les dejo el proyecto original para descargarlo

Anuncios

Esto lo hago en caso de que no posean el primer proyecto creado, en caso de tenerlo deberan usar los pasos de importacion pero si no lo tienen extraen los archivos en un lugar de su pc y recuerden donde lo hicieron.

Anuncios

Volviendo a nuestro proyecto vamos a importar los sprites de dos objetos:

  • spr_Prd
  • spr_CJ
Anuncios

El primero sera el sprite que usabamos como pared delimitador y el segundo sera el caracter jugable, para hacer esto vamos a nuestro Asset Browser, buscamos la carpeta Sprites, hacemos click con el boton derecho y seleccionamos Add Existing, nos abrira un cuadro y deberemos ir al proyecto, dentro del mismo iremos a la carpeta sprites y primero iremos a la carpeta spr_CJ y seleccionaremos el archivo spr_CJ.yy, una vez seleccionado y abierto comenzara el proceso de importacion, una vez finalizado volvemos a repetir el proceso pero esta vez sobre el sprite spr_Prd, con esto realizado nos quedara de la siguiente manera

Anuncios
Anuncios
Anuncios

Con esto realizado nuestro siguiente paso sera crear los objetos para nuestro sprites, el primero que crearemos lo llamaremos obj_pared y le asignaremos el sprite spr_Prd, en este caso no modificaremos el tipo de origen asi como tampoco la mascara de colision, con este objeto creado haremos otro y lo llamaremos obj_cj, le asignamos el otro sprite pero si modificaremos el origen de Top Left a Middle Centre y no modifiquemos la mascara de colision, con nuestros objetos creados solo nos resta trabajar con las fisicas.

Anuncios

Para ello primero iremos al objeto que usaremos como pared, obj_pared, tildaremos la opcion de Uses Physics, y despues pulsaremos el boton Physics para habilitarlas, en este caso solo modificaremos la densidad (Density) a 0 y verificamos que la forma de colision sea de tipo Box, con esto comprobado podemos pasar al siguiente objeto.

Anuncios

En el objeto del jugador tildaremos a Uses Physics, luego presionamos Physics, en el cuadro de las fisicas presionamos el boton para modificar la forma de la colision, en este caso pasaremos de Box a Convex Shape, les dejo un ejemplo de como lo modifique

Anuncios

Con esto tendremos una forma mas especifica para las colisiones, nuestro siguiente paso sera la creacion de una serie de eventos, el primer evento que agregaremos sera un Create al cual le agregaremos el siguiente codigo:

phy_fixed_rotation = true;
vel_hor = 0;
vel_vrt = 0;
Anuncios

La primer variable sera para evitar que nuestro objeto sufra rotaciones por fuerzas externas, estos pueden ser por codigo, fuerzas o colisiones, y su valor predeterminado es false, por esta razon lo seteamos en true para evitar que rotemos cuando colisionemos con el objeto de pared, las siguientes variables son las mismas que utilizamos en proyectos anteriores para aplicar la velocidad horizontal y vertical respectivamente, nuestro siguiente paso sera agregar un evento Step y en este el siguiente codigo:

if (keyboard_check(vk_left)) vel_hor = -5;
if (keyboard_check(vk_right)) vel_hor = 5;
if ((keyboard_check(vk_left) && keyboard_check(vk_right)) ||
	(!keyboard_check(vk_left) && !keyboard_check(vk_right)))
{
	vel_hor = 0;
}

if (keyboard_check(vk_up)) vel_vrt = -5;
if (keyboard_check(vk_down)) vel_vrt = 5;
if ((keyboard_check(vk_up) && keyboard_check(vk_down)) ||
	(!keyboard_check(vk_up) && !keyboard_check(vk_down)))
{
	vel_vrt = 0;
}

phy_position_x += vel_hor;
phy_position_y += vel_vrt;

vel_hor = 0;
vel_vrt = 0;
Anuncios
Anuncios

Todo esto es muy similar a lo que vimos hasta ahora, es decir el primer bloque de condicionales primero verifica si presionamos la flecha izquierda y establece un valor negativo para vel_hor, la siguiente verifica si se presiono la flecha derecha y establece un valor positivo para vel_hor y el siguiente condicional verificamos si se presionaron ambas teclas o no se presionaron ambas teclas y en cualquiera de las dos condiciones establece a vel_hor con el valor de 0 para detenernos, el siguiente bloque de condicionales es igual pero verifica por la flecha arriba y la flecha abajo, afectando a vel_vrt en lugar de vel_hor y el ultimo trabaja de la misma forma para detener el desplazamiento vertical, despues de estos condicionales tenemos dos variables que incrementaremos con las variables antes seteadas, estas sirven para:

  • phy_position_x, permite establecer u obtener el valor de la posicion del eje X en base a las fisicas del room
  • phy_position_y, idem al anterior pero con respecto al eje Y
Anuncios

Es decir que estas nos serviran para desplazarnos, por ultimo establecemos de nuevo los valores de las variables nuestras con el valor de 0, esto es para evitar que se este desplazando constantemente, por ultimo debemos agregar un nuevo evento de tipo Collision y deben relacionarlo al objeto de la pared, a este lo dejaremos en blanco, con esto terminamos con los objetos pasemos al siguiente paso.

Anuncios

En este caso modificaremos al Room creado predeterminadamente, donde primero modificaremos el tamaño del mismo a 800×384, luego activaremos las fisicas, la unica modificacion que estableceremos para este caso sera la gravedad del eje Y (Y Gravity) con el valor de 0 para que no sea tirado hacia abajo y por ultimo agregaremos los elementos en el Room, les dejo un ejemplo

Anuncios

Con todas estas modificaciones realizadas podemos pasar a compilar y probar nuestro juego, veamos el siguiente video para ver su funcionamiento

Anuncios

Pueden observar que al margen de que importamos los sprites, la realizacion del juego fue mucho mas sencilla utilizando el engine interno de fisicas, con muy pocas modificaciones logramos un juego muy similar al primero que realizamos, como pueden observar esto puede facilitar mucho nuestro trabajo siempre y cuando tengan en cuenta todo lo que mencionamos hace unos posts atras.

Anuncios

Por ultimo les dejo el proyecto final que hicimos en este post para que puedan compararlo o ver su codigo:

Anuncios

En resumen, hoy hemos visto como un juego que ya hemos realizado puede simplificarse por medio de la utilizacion del engine interno de las fisicas, hemos repasado como importar desde otro proyecto elementos del mismo, hemos visto las pequeñas modificaciones que debemos hacer para implementarlo y por ultimo el breve codigo que usamos, 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