Instance variables
Le instace variables consentono ad ogni mostro di memorizzare il proprio valore di salute. Una variabile è semplicemente un valore che può cambiare (o variare), e sono memorizzate separatamente per ogni istanza, da cui il nome della variabile di istanza (instance variables).
Aggiungiamo una instance variable health al nostro mostro. Cliccate su di esso nella barra di progetto o nella barra degli oggetti. In alternativa, potete andare sul layout e selezionare un mostro. Sulla sinistra vi apparirà la barra delle sue proprietà. Cliccate Add/edit su Edit variables.
La finestra di dialogo delle istance variables si aprirà. E' molto simile a quella dei Behaviors che abbiamo visto prima, ma invece vi permette di aggiungere e cambiare le istance variable per l'oggetto. Cliccate sul tasto verde Add aggiungerne una nuova.
Nella finestra di dialogo che comparirà digitate health (salute) nel campo "Name", alla voce Type lasciate Number, come valore iniziale Initial value scegliete 5 (come mostrato). Questo fa in modo che ogni mostro cominci con il valore di salute pari a 5. Quando sono colpiti, diminuiremo di 1 la salute e quando arriva a zero distruggeremo l'oggetto.
Una volta fatto, cliccate su OK. Notate che adesso la la variabile appare sulla colonna sinistra, tra le proprietà del mostro. (Potete tranquillamente modificare il valore dalla barra delle proprietà, ma per aggiungere o rimuovere variabili dovete sempre passare dal link Add / Edit)
Modificare gli eventi
Tornate alla Event Sheet. Fino ad ora stiamo distruggendo i mostri ogni volta che il proiettile li colpisce. Facciamo in modo, invece, che questo sottragga 1 dalla loro vita.
Trovate l’evento Bullet - on collision with Monster. Notate che abbiamo una "destroy monster" action. Andremo a rimpiazzarla con un "subtract 1 from health" (sottrai 1 dalla salute). Click col destro del mouse su "destroy monster" e click su Replace.
La stessa finestra comparirebbe se stessimo inserendo una nuova azione, ma questa volta invece rimpiazzerà l'azione che abbiamo cliccato. Scegliete Monster -> Subtract from (nella categoria Instance variables) -> Instance variable "health", e inserite 1 in Value. Cliccate Done. L’azione dovrebbe adesso apparire così:
Adesso quando spariamo i mostri perdono 1 vita e il proiettile esplode, ma non abbiamo ancora creato un evento che distrugga i mostri quando raggiungono vita zero. Aggiungiamo un altro evento:
Condition: Monster -> Compare instance variable -> Health, Less or equal, 0
Action: Monster -> Spawn another object -> Explosion, layer 1
Action: Monster -> Destroy
Perchè "less or equal 0" (minore o uguale a zero) e non "equal 0" (uguale a zero)? Supponiamo che volessimo aggiungere una nuova arma, che invece di sottrarre una vita, ne sottraesse 2 per ogni colpo inflitto al mostro. In quel caso le vite sarebbero scalate in questo modo: 5, 3, 1, -1, -3... Notate che le vite non arrivano mai a 0, quindi non morirebbe mai! E' buona norma usare sempre "less or equal" per controllare se la vita di qualcosa è finita.
Fate partire il gioco. Ciascun mostro adesso dovrà essere colpito 5 volte prima che esploda. :)
Tenere il punteggio
Teniamo un punteggio in maniera che il giocatore sappia come sta andando. Avremo bisogno di un'altra variabile per questo. Potreste pensare "mettiamo il punteggio come una instance variable del giocatore!". Potrebbe non essere una cattiva idea, ma ricordate che il valore è memorizzato "dentro" l'oggetto. Se non ci sono istanze, non ci sono nemmeno variabli! Quindi, se distruggessimo il giocatore non avremmo piu' modo di dire quale fosse il suo punteggio, in quanto sarebbe stato distrutto insieme al giocatore stesso.
Invece, possiamo usare una global variable (variabile globale). Così come una instance variable, una global variable (o solo "global") può memorizzare un testo o un numero. Ogni variabile può memorizzare un singolo numero o un singolo testo. Le variabli globali sono anche disponibili per tutti i layouts - molto comodo se volessimo aggiungere altri livelli.
Cliccate con il destro nello spazio in fondo al foglio degli eventi e selezionate Add global variable.
Inserite Score come nome. Gli altri campi vanno bene come proposti, ovvero un numerico che comincia da 0.
Adesso la variabile globale compare come una riga nel foglio degli eventi.
Nota: esistono anche le variabili locali cui si può accedere solo da uno "scope" più ristretto di eventi, ma non abbiamo bisogno di preoccuparci di questo adesso.
Diamo al giocatore un punto ogni mostro ucciso. Nel nostro evento "Monster: health less or equal 0" (ovvero quando un mostro muore), cliccate Add action e selezionate System -> Add to (sotto Global & local variables) -> Score, value 1. Adesso l'evento dovrebbe essere così:
Adesso il giocatore ha un punteggio, che incrementa di 1 ogni mostro ucciso - ma non può vedere il punteggio! Mostramoglielo con un oggetto di testo.