Bienvenidos sean a este post, hasta el post anterior hicimos una modificaciones geniales para nuestro juego pero hoy agregaremos la primera dificultad de nuestro juego.
Al igual que en los casos anteriores vamos a crear un nuevo sprite para nuestro enemigo, igual que antes vamos al Asset Browser, buscamos la carpeta Sprites, hacemos click con el boton derecho y seleccionamos Create -> Sprite, a este sprite lo llamaremos spr_Enemigo, y usaremos un tamaño de 32×32, en este caso usaremos solo una imagen por lo tanto no agregaremos nada mas, les dejo una sugerencia de enemigo mediante la siguiente imagen

Con nuestro sprite creado el siguiente paso sera definir la Collision mask, como siempre pasamos el Mode de Automatic a Manual pero en esta ocasion aprovecharemos y cambiaremos la forma o Type de Rectangle a Ellipse, para que detecte solo nuestra imagen, con esto pasemos a crear el objeto de la misma manera que siempre, vamos al Asset Browser, buscamos a la carpeta Objects, la seleccionamos y hacemos click con el boton derecho para seleccionar Create -> Object, a nuestro nuevo objeto lo llamaremos obj_Enemigo y le asignaremos el sprite antes creado, por ultimo lo establecemos como solido.
Con nuestro objeto creado vamos a trabajar con nuestro objeto obj_Pepe, vamos al evento Create y agregaremos la siguiente variable:
no_colisiono_enemigo = true;
Esta sera la variable encargada de ver si colisionamos o no contra un enemigo, mientras no lo hagamos sera true y cuando lo hagamos lo pasaremos a false, un detalle que no aclaramos el tipo de colision con nuestro enemigo si nosotros colisionamos con la parte de abajo de este, es decir con el bottom, nos producira daño y caeremos pero si colisionamos con la parte de arriba, es decir con el top, haremos que nuestro enemigo desaparezca, con esto aclarado sigamos.
Para saber donde colisionamos en lugar de utilizar collision_rectangle usaremos a collision_line, esto nos permitira crear de una forma mas simple una linea para detectar cuando es arriba y abajo, para ello iremos al evento Step y al comienzo de esta agregaremos estas dos variables:
var abajo=collision_line(
x,
y,
x + sprite_width,
y,
obj_Enemigo,
false,false);
var arriba=collision_line(
x,
y + sprite_height,
x + sprite_width,
y + sprite_height,
obj_Enemigo,
false,false);
Como pueden ver es similar a collision_rectangle, donde cada valor es para left, top, right y bottom respectivamente, luego pasaremos el objeto a verificar y por ultimo, el valor de precision y notme, vamos a analizar la primer variable observen que lo seteamos en la parte superior de nuestro objeto personaje, obj_Pepe, porque debemos chequear si la cabeza de nuestro jugador colisiona con la parte inferior del enemigo, en cambio la siguiente variable la usaremos para establecer a la linea en los pies de nuestro personaje, observen como establecimos sus atributos en base a la altura y el ancho del sprite, en ambos casos pasamos al objeto enemigo, con esto ya tenemos las variables para poder saber cuando hay contacto en la parte inferior o superior de un enemigo, pasemos a ver como actuar con estos contactos.
Para lograr esto debemos usar unos condicionales donde verificaremos si hubo contacto con alguna de estas variables, en este caso agregaremos el siguiente bloque dentro del evento Step:
if (abajo != noone)
{
no_colisiono_enemigo = false;
vspeed = 10;
}
else if (arriba != noone)
{
instance_destroy(arriba);
}
Primero vamos a chequear si abajo es distinto de noone, es decir que nos devolvio una instancia con la cual colisiono, en caso de ser verdadero estableceremos a no_colisiono_enemigo como false y estableceremos a vspeed como 10 para que caiga rapido, pronto veremos para que nos sirve esta variable, luego tendremos un else if donde verifica si arriba es distinto de noone, esto significa que le caimos por arriba y por ende lo pisamos, en este caso haremos que destruya la instancia y para eso usaremos instance_destroy y le pasaremos el valor que este en arriba, con esto tenemos un juego mas divertido con enemigos que pueden matarnos o podemos matarlos pero todavia nos falta una modificacion mas, para ello debemos cambiar el siguiente condicional:
if (!place_free(x, y + 1))
{
vspeed = -10;
gravity = 0.5;
}
De la siguiente manera:
if (!place_free(x, y + 1) && no_colisiono_enemigo)
{
vspeed = -10;
gravity = 0.5;
}
Basicamente lo que hicimos fue modificar para que solamente rebote si no_colisiono_enemigo es igual a true, por lo tanto cuando impactemos a un enemigo por debajo no podremos saltar sobre las plataformas y solo caeremos, con esta ultima modificacion podemos probar para ver como funciona nuestro juego pero antes acomoden algunos enemigos en el room, compilemos y veamos que sucede mediante el siguiente video
En el video podemos ver todo lo realizado hasta ahora y ademas como nuestros enemigos mueren al ser pisados, tambien vemos como morimos cuando le pegamos por abajo, con esto tenemos un juego mucho mas completo y emocionante.
En resumen, hoy hemos visto como agregar enemigos, como lidiaremos con ellos tanto para eliminarlos como para que nos maten, las modificaciones que hicimos para poder realizar ambas tareas, y por ultimo vimos quedo nuestro juego mas operativo, espero les este gustando 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
