Variables de instancia
Las variables de instancia permiten a cada monstruo tener su propia cantidad de salud. Una variable es un valor que puede cambiar (o variar), y se guardan de forma separada para cada instancia, de ahí el nombre variable de instancia.
Vamos a añadir una variable de instancia salud a nuestros monstruos.
Clic en el monstruo en la barra de proyecto o en la de objeto. También puedes regresar al layout y selecionar un objeto monstruo. Se mostrarán las propiedades del monstruo en la barra de propiedades. Clic en Instance variables (variables de instancia).
Aparece el cuadro de diálogo Variables de Instancia. Es similar al de Behaviors (comportamientos) que vimos antes, pero este te permite añadir y cambiar variables de instancia al objeto. Clic en el botón + para incluir uno nuevo.
Una vez en la ventana, escribe salud en el Name (nombre), deja Type (tipo) como Number (Número) y para Initial value (Valor inicial) escribe 5 (tal como se muestra en la imagen). Esto le da un 5 de salud a cada monstruo. Cuando reciben un disparo se le restará 1 de salud y cuando llegue a 0 se destruirá el objeto. Si quieres agregas una descripción.
Clic en OK (Aceptar). Fíjate que la variable aparece ahora en el cuadro de diálogo variables de instancia y también en las propiedades del monstruo. (Puedes cambiar de forma rápida los valores iniciales en la barra de propiedades, pero para añadir o borrar variables necesitarás hacer clic en el enlace Añadir/Editar).
Cambiando los eventos
Volvamos a la página de eventos. Por el momento, destruimos los monstruos tan pronto como reciben un balazo. Vamos a cambiar esto restándole 1 al indicador de salud.
Encuentra el evento que dice: Bullet | on collision with monster. Fíjate que ahora tenemos una acción monster | Destroy. Vamos a reemplazarlo por "restar 1 a la salud". Haz clic con el botón derecho en la acción "monster - Destroy" y clic en Replace Action (reemplazar acción).
Aparece el mismo cuadro de diálogo como cuando añadimos una nueva acción, pero esta vez sustituiremos la acción sobre la que hicimos clic. Elige monster -> Subtract from -> Instance variable "salud", y escribe un Value de 1. Clic en Done. La acción se debería ver así:
Ahora cuando disparemos a los monstruos perderán 1 de su salud y la bala explota, pero aún no hemos hecho un evento que mate a los monstruos cuando llegue a cero. Añade otro evento:
Condición: monster -> Compare instance variable -> Salud, Less or equal, 0
Acción: monster -> Destroy
¿Por qué "menor o igual a 0" en vez de "igual a 0"? Imagínate que añadimos un arma más potente que resta 2 de la salud. Cuando dispares a un monstruo, su salud debería de ser 5, 3, 1, -1, -3... fíjate que nunca se llega a un valor igual a cero, así que no moriría! Por eso es una buena práctica usar "menor o igual" para probar si alguien pierde todo su nivel de salud.
Prueba el juego. Ahora deberás de acertar cinco veces en los monstruos para matarlos!
Llevando la cuenta
Ahora necesitamos una puntuación para que el jugador sepa como lo está haciendo, para ello usaremos una nueva variable. Podría pensar "pondremos la puntuación en un variable de instancia en un jugador!". No es una mala idea, pero recuerda que el valor se guarda "en" el objeto. Si no hay instancias tampoco hay variables! Así que si destruimos al jugador (por ejemplo al morir) no podremos mostrar cual es la puntuación, porque se destruirá con él.
En vez de ello, usaremos una variable global. Como una variable de instancia, una global puede almacenar textos o números. No obstante, sólo puede guardar un valor que estará disponible en todo el juego sin importar los layouts - cómodo si la queremos usar en otros niveles.
Haz clic derecho en un espacio en blanco al final de la página de eventos y selecciona Add global variable (Añadir variable global).
Escribe Puntaje como nombre. Los otros campos déjalos como están, se creará un número con valor inicial de 0.
Ahora la variable global aparece como una línea en la página de eventos.
Le daremos un punto al jugador por matar un monstruo. En nuestro evento "Monster: salud < 0" (cuando el monstruo muere), clic en Add action y selecciona System -> Add to (abajo de Global & local variables) -> Puntaje, Value : 1. Ahora el evento debería verse así:
Ahora el jugador tiene una puntuación, que se incrementa en 1 por cada monstruo que mate - pero por el momento no la puede ver! La mostraremos con un objeto de texto.