Anuncios

Bienvenidos sean a este post, en el proyecto anterior vimos como implementar una barra de salud pero en esta ocasion no solo haremos una barra de salud sino que agregaremos vidas tambien.

Anuncios

Debemos volver a nuestro room raiz (rm_raiz) y agregaremos las siguientes lineas antes antes de la linea existente:

health = 100;
lives = 3;
Anuncios

En este caso estableceremos los valores para nuestra salud (health) y vidas (lives), estas son dos variables de tipo internas de nuestro Game Engine para almacenar estos datos, nuestro siguiente paso sera ir al objeto obj_Cj donde agregaremos un nuevo evento Create al cual solo le agregaremos la siguiente linea:

invencible = false;
Anuncios

Esta linea sera fundamental para mas adelante, por el momento dejemosla asi, el siguiente paso sera agregar el siguiente bloque dentro del evento Step en obj_Cj despues de todas las condiciones que usamos para interceptar las teclas:

if (collision_rectangle(
	x,
	y,
	x + 32,
	y + 64,
	obj_Enemigo, false, false) != noone && !invencible)
	{
		health -= 25;
		x = xstart;
		y = ystart;
	}
Anuncios

En esta ocasion volvemos a usar collision_rectangle pero esta vez no solamente lo usaremos contra noone sino tambien contra invencible siempre y cuando sea false, recuerden el negador, si se cumplen las condiciones le restaremos 25 a health y haremos que el jugador vuelva a su posicion inicial (Jump to start), nuestro siguiente paso sera crear un nuevo objeto dentro de la carpeta Objects y lo llamaremos obj_Salud, el cual no llevara ningun sprite tal como hicimos en el proyecto anterior, una vez creado debemos arrastrarlo y lo tiraremos en algun parte del rm_main, tal como se ve en la siguiente imagen

Anuncios

Les resalte donde agregue el nuevo objeto, recuerden que al no tener una sprite asociado nos aparecera con un signo de interrogacion, vamos a este objeto y le agregaremos un evento Step -> Step, dentro de este evento creado agregaremos el siguiente codigo:

if (health < 1)
{
	--lives;
	if (lives > 0)
	{
		health = 100;
	}
}
Anuncios

En este condicional verificamos si health es menor que 1, porque hay momentos que no sera entero y puede no ser completamente 0, si es el caso procedera a restarnos una vida, en este caso usamos un operador para decrementar del cual hablamos en este post pero no explique esto. Este operador y su contraparte, ++, se pueden poner delante o detras de la variable al primero se lo denomina pre y al segundo pos, es decir preincrementar o predecrementar y al otro posincrementar o posdecrementar, la diferencia radica que el pre incrementa o decrementa antes de utilizar a la variable y el pos lo hace despues de haberse usado, parece una tontera pero bajo ciertas circunstancias necesitaremos diferenciarlo, como es el caso de ahora.

Anuncios

En este caso disminuimos el valor las vidas en 1, luego verificamos si este es mayor a 0, en caso de ser verdadero procede a restaurar el valor de health a 100, nuestro siguiente paso sera mostrar la cantidad de vidas que disponemos, para ello debemos crear un nuevo sprite al cual llamaremos spr_Corazon, dibujaremos una forma de corazon de un tamaño de 24 x 24, les dejo un ejemplo de como puede ser

Anuncios

Un detalle simple, observen que deje un poco de espacio en todos los laterales, esto es para facilitar a la hora de representarlo y aqui comenzamos con la magia porque no haremos un objeto sino que usaremos una funcion para representarlas, lo siguiente que debemos hacer es agregar un nuevo evento en obj_Salud del tipo Draw -> Draw, una vez creado el evento agregaremos el siguiente codigo:

var i = 0;
repeat(lives)
{
     draw_sprite(spr_Corazon, 0,
         30 + i * sprite_get_width(spr_Corazon) + 4,
         17);
     ++i;
}
Anuncios

Primero declaramos una variable llamada i la cual iniciaremos con 0, luego usaremos la funcion repeat para repetir la cantidad de veces que sea necesaria un bloque y este dato sera informado por lives, en el bloque usaremos a draw_sprite para dibujar el sprite del corazon, la sintaxis de esta funcion es la siguiente:

draw_sprite(sprite, frame, x, y);
Anuncios

Los parametros que pasaremos son los siguientes:

  • sprite, sera el nombre que le asignamos al sprite
  • frame, sera el numero de frame o cuadro que queremos mostrar
  • x, la posicion del eje x
  • y, la posicion del eje y
Anuncios

Con esto tenemos la explicacion basica, volviendo a nuestro bloque vemos que primero pasamos el sprite, luego el frame y en este caso sera 0 porque es el unico que tenemos, luego usamos una formula para ubicar en el eje X, usamos la posicion inicial de 30 y a esta le sumaremos el valor de la multiplicacion de i por el ancho del sprite y a este le sumamos un 4, y por ultimo usamos a 0 como posicion del eje Y, por ultimo preincrementamos el valor de i, como podran imaginarse a la primera imagen no habra problema porque i al valer 0 solamente le sumamos 4 al 30 pero a la segunda vuelta i valdra 1 por lo tanto no solo le sumamos 4 sino tambien el ancho del sprite (24) dando un valor para x de 58 y para el proximo corazon vuelve a repetir la formula y obtiene para x un valor de 72 y con esto tenemos a nuestros tres corazones, nuestro siguiente paso sera agregar la barra de salud.

Anuncios

Para mostrar la barra de salud vamos a usar la funcion draw_healthbar, antes de implementarlo vamos a ver su sintaxis:

draw_healthbar(x1,y1,x2,y2,cantidad,backcol,mincol,maxcol,direccion,showback,showborder)
Anuncios

Los parametros corresponden a los siguientes atributos:

  • x1, sera el valor para left
  • y1, sera el valor para top
  • x2, sera el valor para right
  • y2, sera el valor para bottom
  • cantidad, sera la cantidad que asignamos para health
  • backcol, el color para el fondo de la barra
  • mincol, el color para cuando hay poca “salud”
  • maxcol, el color para cuando hay “salud” completa
  • direccion, sera para indicar la direccion de como disminuye
  • showback, valor booleano muestra o no el valor del fondo
  • showborder, igual al anterior pero para el borde
Anuncios

Si recordamos cuando hicimos la barra del proyecto anterior fueron los mismos datos que configuramos, para poder utilizarlo en nuestro proyecto lo agregaremos el siguiente bloque dentro del evento Step del objeto obj_Salud por detras del repeat que vimos recien:

draw_healthbar(30,5,130,10,health,
	c_black,c_red,c_green,0,true,true);
Anuncios

En los primeros parametros definimos desde donde va a empezar la barra, tanto desde el ancho como el alto, el siguiente dato define hasta donde llega y el ultimo que altura tendra, despues le pasamos el valor de health para que actualice la barra, despues usaremos tres constantes internas del Game Engine para representar los colores:

  • c_black, equivale al color negro y lo asignamos al fondo
  • c_red, es para el rojo y lo usamos para el menor valor de salud
  • c_green, es para el verde y lo usamos para el maximo de salud
Anuncios

El siguiente valor dijimos que era para indicar en que direccion se reducira la barra, tenemos los siguientes valores:

  • 0, para la izquierda
  • 1, para la derecha
  • 2, para arriba
  • 3, para abajo
Anuncios

Los ultimos dos valores son para cuando usamos una barra vertical en lugar de una horizontal, y en los ultimos dos usamos true para que muestre el color de fondo y los bordes, con todo esto realizado podemos probar nuestro juego para verlo en accion mediante el siguiente video

Anuncios

Hasta aca tenemos un video juego mas completo pero todavia nos falta un detalle como es el de que sucede cuando se acaban las vidas? Para eso debemos volver a nuestro objeto obj_Salud y donde disminuimos las vidas, es decir el evento Step modificaremos el condicoonal de la siguiente manera:

if (health < 1)
{
	--lives;
	if (lives > 0)
	{
		health = 100;
	} else {
		var msg = show_question("Quieres reiniciar el juego (Y/N)?");
		if (msg == 1)
		{
			game_restart();
		} else {
			game_end();
		}
	}
}
Anuncios

Observen que el principio sigue igual solamente agregamos un else para evaluar que lives ya no es mayor que 0, en ese caso mostrara un mensaje por medio de show_question donde pregunta si queremos reiniciar el juego, apareceran dos botones con “Yes” y “No”, la respuesta de esta funcion la almacenamos en una variable llamada msg, lo siguiente es un condicional donde verifica si msg es igual a 1, es decir que presiono el boton de Yes, si este es el valor ejecutar a game_restart y reinicia el juego, de lo contrario es decir presionamos No, llama a game_end y finaliza el juego, con todas estas modificaciones podemos probar el juego y ver como trabaja mediante el siguiente video

Anuncios

Con este video podemos ver todas las modificaciones que realizamos con exito e inclusive ahora tenemos la posibilidad de salir o seguir con nuestro juego, con esto tenemos un juego de gran calidad pero todavia nos faltan algunos temas mas para completarlo como hicimos con el primer proyecto.

Anuncios

En resumen, hoy hemos agregado el sistema de salud nuevamente, tambien hemos agregado vidas para nuestro jugador, hemos visto como quitar vidas con respecto a nuestra salud, hemos visto como agregar una notificacion para solicitar al jugador si quiere terminar el juego o no, 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