Bienvenidos sean a este post, hoy nos centraremos en la creacion de las paredes para nuestro nivel y como detectar las colisiones.
Ante todo debemos crear un nuevo objeto al cual llamaremos obj_Prd, le asignaremos el sprite spr_Prd, y estableceremos como solido, luego como hicimos en el proyecto anterior agregaremos este objeto para generar un nuevo laberinto, les doy un ejemplo

Si no recuerdan como es todo el trabajo para lograr esto les dejo el siguiente video donde lo hicimos para el proyecto anterior
Con nuestro proyecto actualizado podemos proseguir con el siguiente tema como es el tema de las colisiones.
Para detectar las colisiones vamos a utilizar a la funcion place_free, la cual se encarga de detectar si en las coordenadas informadas existe un espacio vacio, en este caso lo debemos agregar en el condicional donde verificamos las teclas presionadas, veamos como se debe modificar el primer condicional:
if (keyboard_check(vk_left) && keyboard_check(vk_up)
&& place_free(x - veloc, y - veloc))
{
x -= veloc;
y -= veloc;
image_index = 3;
}
En este caso vemos como agregamos un nuevo elemento al condicional donde para los ejes X e Y de place_free le enviamos la misma formula que utilizamos para desplazar a nuestro personaje, basicamente debemos hacer lo mismo en todos los condicionales quedando de la siguiente manera:
/// @description Insert description here
// You can write your code in this editor
veloc = 5;
if (keyboard_check(vk_left) && keyboard_check(vk_up)
&& place_free(x - veloc, y - veloc))
{
x -= veloc;
y -= veloc;
image_index = 3;
}
else if (keyboard_check(vk_left) && keyboard_check(vk_down)
&& place_free(x - veloc, y + veloc))
{
x -= veloc;
y += veloc;
image_index = 3;
}
else if (keyboard_check(vk_right) && keyboard_check(vk_up)
&& place_free(x + veloc, y - veloc))
{
x += veloc;
y -= veloc;
image_index = 2;
}
else if (keyboard_check(vk_right) && keyboard_check(vk_down)
&& place_free( x + veloc, y + veloc))
{
x += veloc;
y += veloc;
image_index = 2;
}
else if (keyboard_check(vk_left) && place_free(x - veloc, y))
{
x -= veloc;
image_index = 3;
}
else if (keyboard_check(vk_right) && place_free(x + veloc, y))
{
x += veloc;
image_index = 2;
}
else if (keyboard_check(vk_up) && place_free(x, y - veloc))
{
y -= veloc;
image_index = 1;
}
else if (keyboard_check(vk_down) && place_free(x, y + veloc))
{
y += veloc;
image_index = 0
}
Como pueden ver la formula es la misma pero solamente incrementa una vez y no constantemente como lo hace el bloque de cada condicional, con esto basicamente lo que decimos a cada condicion que ejecute el bloque siempre y cuando se presione la tecla o teclas y a su vez que el espacio este libre y si encuentra un objeto no se cumple la misma condicion, esto si lo comparamos con el Drag and Drop nos es mucho mas facil ahora porque ya no dependemos de meternos en objeto por objeto y agregar los eventos para verificar si colisionan o no, vamos a compilarlo y probarlo para verlo en accion mediante el siguiente video
Con esto ya tenemos un laberinto y un personaje atrapado en el y que no puede atravesar las paredes, de a poco vuelve a tomar forma nuestro proyecto.
En resumen, hoy hemos visto como agregar nuevamente a nuestras paredes, hemos visto como utilizar un metodo de deteccion practico por medio de GML, en este caso se utilizo la deteccion por medio de place_free, como esto nos facilito la tarea en comparacion con Drag and Drop, 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
