Capitolo 10: Eventi
Game Maker usa quello che viene definito un
approccio “event driven”. Cioè, ogni volta che alle instance degli oggetti
accadono degli eventi (specie di messaggi che avvertono che è successo
qualcosa), possono reagire a questi messaggi eseguendo determinate azioni.
Per ogni oggetto devi indicare a quali eventi risponde e quali azioni
compie. Ciò può sembrare complicato ma in realtà è molto semplice. Prima
di tutto, per la maggioranza degli eventi gli oggetti non devono fare
niente. Per gli eventi in cui deve accadere qualcosa puoi usare un
approccio drag-and-drop molto semplice per indicare le azioni.
Al centro della
finestra delle proprietà dell’oggetto c’è una lista di eventi ai quali
l’oggetto deve reagire. Inizialmente è vuota. Puoi aggiungerci degli
eventi premendo il pulsante Add Event: apparirà una finestra con
tutti i vari tipi di eventi, qui puoi scegliere l’evento che vuoi
aggiungere. A volte si apre un menù con scelte ulteriori: Ad esempio, per
il keyboard event devi scegliere il tasto da premere, in seguito darò una
lista completa con le descrizioni. Puoi modificare l’evento
selezionandolo e cliccandoci sopra.
A destra ci sono tutte le azioni, rappresentate da piccole icone e
raggruppate in schede. Tra gli eventi e le azioni c’è una lista che contiene le azioni per l’evento corrente. Per aggiungere
azioni alla lista, trascinale col mouse da destra nella lista. Saranno
posizionate una sotto l’altra, con una breve descrizione. Per ogni azione
ti verrà chiesto di fornire alcuni parametri che saranno
descritti meglio nel prossimo capitolo. Quindi, dopo aver aggiunto alcune azioni,
la situazione apparirà come segue:
Ora puoi iniziare ad
aggiungere azioni ad un altro evento. Clicca sull’evento corrente col
tasto sinistro per selezionarlo e trascina le azioni nella lista. (Nota
che non puoi eliminare gli eventi, un evento senza azioni correlate verrà
rimosso automaticamente dopo aver chiuso la finestra. Quindi per rimuovere
un evento, rimuovi tutte le sue azioni).
Puoi modificare
l’ordine delle azioni nella lista usando il drag-and-drop. Se tieni
premuto il tasto <Ctrl> mentre trascini crei una copia dell’azione.
Puoi anche usare il drag-and-drop tra liste di azioni di oggetti diversi.
Quando clicchi con il tasto destro del mouse su un’azione, appare un menu
in cui puoi eliminare l’azione (si può fare anche usando il tasto <Del>)
o copiare e incollare le azioni. Quando tieni fermo il mouse su un’azione,
viene data una descrizione più dettagliata dell’azione.
Per eliminare l’evento
correntemente selezionato con tutte le sue azioni premi il pulsante
Delete. (Gli eventi senza azioni saranno eliminati automaticamente una
volta chiusa la finestra, perciò non è necessario farlo). Se vuoi
assegnare le azioni a un evento differente (ad esempio, perché hai deciso
di usare un tasto diverso) premi il pulsante Change e scegli il
nuovo evento che preferisci. (l’evento non deve essere già definito!).
Esiste un numero
piuttosto grande di eventi differenti. Come noterai, alcuni dei nomi degli
eventi sono preceduti da un simbolo di menu. Ciò significa che lì ci sono
diversi eventi. Quando clicchi col mouse sul menu, o premi col tasto
destro sul nome dell’evento, appare un altro menu dal quale puoi scegliere
l’evento che vuoi modificare. Ecco una descrizione dei vari eventi.
(Ricorda che solitamente usi solo alcuni di essi):
Create
event Questo evento si
verifica quando viene creata un’instance dell’oggetto. Di solito si usa
per mettere in movimento l’instance e/o per settare alcune variabili per
l’instance.
Destroy event Questo evento si verifica
quando l’instance viene distrutta. Per essere precisi, si verifica subito prima
che venga distrutta, quindi l’instance esiste ancora quando l’evento viene
eseguito! Nella maggior parte dei casi questo evento non viene usato, ma puoi
usarlo, ad esempio, per cambiare il punteggio o creare qualche altro oggetto.
Alarm events
Ogni instance ha 8
“alarm clocks”. Puoi settare queste sveglie usando delle azioni (vedi il
prossimo capitolo). La sveglia poi diminuirà fino ad arrivare a 0, e in
quel momento viene generato l’alarm event. Per indicare le azioni per un
dato alarm clock, devi prima selezionarlo nel menu. Gli alarm clock sono
molto utili. Puoi usarli per far avvenire delle cose in tempi prefissati.
Per esempio, un mostro può cambiare la sua direzione ogni 20 passi. (In
questi casi una delle azioni nell’evento deve settare nuovamente l’alarm
clock).
Step events
Lo step event si verifica ad ogni passo del
gioco. Qui puoi mettere le azioni che devono essere eseguite di continuo.
Ad esempio, se un oggetto deve seguire un altro, puoi adattare qui la
direzione verso l’oggetto da seguire. Ma fai attenzione con questo evento.
Non mettere nello step event molte azioni complesse di oggetti con molte
instance. Ciò potrebbe rallentare il gioco. Per essere più precisi, ci
sono tre diversi tipi di step event. Di solito ti basta definire quello di
default. Ma usando il menu puoi anche scegliere il begin step event e
l’end step event. Il begin step event è eseguito subito prima che le
instance vengano messe nelle loro nuove posizioni. L’end step event è
eseguito alla fine del passo, subito prima del disegno. E’ usato
tipicamente, ad esempio, per cambiare lo sprite a seconda della direzione
corrente.
Collision events
Ogni volta che due instance collidono
(ossia, i loro sprite si sovrappongono) c’è un collision event. Beh, per
essere precisi avvengono due collision event; uno per ogni instance.
L’instance può reagire a questo evento. A questo scopo, dal menu scegli
l’oggetto con cui vuoi definire il collision event. Ora metti qui le
azioni. C’è una
differenza tra quello che accade quando l’instance urta un oggetto solido
o non solido. Prima di tutto, quando non ci sono azioni nel collision
event, non succede nulla. L’instance corrente continua semplicemente a
muoversi; anche se l’altro oggetto è solido.
Quando l’altro oggetto
è solido, l’instance viene spostata nella sua posizione precedente (prima
della collisione). Poi l’evento viene eseguito e infine, l’instance viene
spostata nella sua nuova posizione. Quindi se l’evento, ad esempio,
inverte la direzione del moto, l’instance rimbalza contro il muro senza
fermarsi. Se c’è ancora una collisione, l’instance è tenuta nella sua
posizione precedente. Quindi, in effetti, si ferma.
Quando l’altro oggetto non è solido,
l’instance non viene riportata indietro. L’evento viene semplicemente
eseguito con l’instance nella sua posizione corrente, inoltre, non c’è un
secondo controllo di collisione. Se ci pensi, è logico che ciò accada,
poiché l’oggetto non è solido, possiamo semplicemente passarci sopra.
L’evento ci notifica che ciò accade.
Ci sono molti usi per
il collision event. Le instance possono usarlo per rimbalzare contro i
muri. Puoi usarlo per distruggere gli oggetti quando sono colpiti, ad es.,
da un proiettile, etc.
Keyboard events
Quando il giocatore preme un tasto, si
verifica un keyboard event per tutte le instance di tutti gli oggetti. C’è
un evento diverso per ogni tasto. Nel menu puoi scegliere il tasto per il
quale vuoi definire il keyboard event e poi trascinarci le azioni,
chiaramente, solo pochi oggetti necessitano di eventi per pochi tasti. Hai
un evento in ogni passo finché il giocatore tiene premuto il tasto. Ci
sono due keyboard event speciali. Il primo si chiama <No key>.
Questo evento si verifica in ogni passo in cui non viene premuto alcun
tasto. Il secondo si chiama <Any key> e si verifica ogni volta che
viene premuto un qualunque tasto. Tra l’altro, quando il giocatore preme
più tasti, si verificano gli eventi per tutti i tasti premuti. Nota che i
tasti del tastierino numerico producono i rispettivi eventi solo se <NumLock>
è attivato.
Mouse events Si verifica un mouse event
per un’instance ogni volta che il puntatore del mouse si trova all’interno
dello sprite che rappresenta l’instance. A seconda del pulsante che viene
premuto si ha il no button, left button, right button, o middle button event. I
mouse button event vengono generati in ogni passo finché il giocatore tiene
premuto il pulsante del mouse. Gli eventi di tasto premuto vengono generati
solo quando il pulsante è premuto. Gli eventi di rilascio solo quando il
pulsante viene rilasciato. Nota che questi eventi si verificano solo quando il
mouse è sull’instance. Se il giocatore preme un tasto del mouse in un punto in
cui non ci sono instance, non viene generato alcun evento. A volte è comunque
importante reagire a qualunque clic del mouse. Ciò s può ottenere creando uno
sprite delle stesse dimensioni della stanza. Ora crea un oggetto con questo
sprite, che copre l’intera stanza. Puoi rendere l’oggetto invisibile. Mettilo
in ogni stanza, e genererà degli eventi ogni volta che il giocatore premerà un
tasto del mouse.
Other
events Ci sono svariati altri
eventi che possono essere utili in certi giochi. Si trovano in questo
menu. Qui si possono trovare i seguenti eventi:
- Outside:
Questo evento si verifica quando l’instance si trova completamente fuori
dalla stanza. E’ tipicamente un buon momento per distruggerla.
- Boundary: Questo evento si verifica quando
l’instance interseca il bordo della stanza.
- Game start: Questo evento si
verifica per tutte le instance nella prima stanza quando il gioco
inizia. Si verifica prima del room start event (vedi sotto) e anche
prima dei creation events delle instance nella stanza. Questo evento è
tipicamente definito solo in un oggetto “di controllo” ed è usato per
iniziare dei sottofondi musicali e inizializzare delle variabili, o
caricare dei dati.
- Game end:
L’evento si verifica per tutte le instance quando il gioco finisce.
Anche stavolta, di solito solo un oggetto definisce questo evento. E’
usato, per esempio, per salvare dei dati in un file.
- Room start:
Questo evento si verifica per tutte le instance all’inizio di una
stanza. Avviene prima dei creation events.
- Room end: Questo evento si verifica per tutte
le instance esistenti alla fine della stanza.
- No more lives: Game Maker ha
un proprio sistema di vite. C’è un’azione per settare e cambiare il
numero di vite. Ogni volta che il numero di vite diventa minore o uguale
a 0, si verifica questo evento. E’ tipicamente usato per terminare o
resettare il gioco.
- End of animation:
Come indicato sopra, un’animazione consiste di alcune immagini mostrate
una dopo l’altra. Dopo che l’ultima è stata mostrata si riprende con la
prima. L’evento si verifica esattamente in quel momento. Può essere
usato, ad es., per cambiare animazione, o distruggere l’instance.
- End of path:
Questo evento si verifica quando l’instance segue un percorso e ne
raggiunge la fine. Vedi il Capitolo 18 per ulteriori informazioni sui
percorsi.
- User defined:
Ci sono otto eventi di questo tipo. Normalmente non avvengono mai, a
meno che non li chiami tu stesso da un pezzo di codice.
Drawing event
Le instance, se visibili, disegnano il loro
sprite sullo schermo ad ogni passo. Quando specifichi azioni nel drawing
event, lo sprite non viene
disegnato, ma vengono invece eseguite queste azioni. Può essere usato per
disegnare qualcosa che non sia lo sprite, o per fare prima delle modifiche
ai parametri dello sprite. Ci sono diverse azioni di disegno che sono
fatte apposta per essere usate nel drawing event. Nota che il drawing
event viene eseguito solo quando l’oggetto è visibile. Nota anche che,
indipendentemente da cosa disegni, i collision event si basano sullo
sprite associato all’instance.
Key press events
Questo evento è simile al keyboard event
ma si verifica solo una volta quando il tasto viene premuto, invece che di
continuo. Ciò è utile quando vuoi che un’azione avvenga solo una volta.
Key release events
Questo evento è simile al keyboard event
ma si verifica solo una volta quando il tasto viene rilasciato, invece che
di continuo.
In alcune situazioni
è importante capire l’ordine in cui Game Maker considera gli eventi. Ciò
avviene come segue:
-
Begin step event - Alarm
event -
Keyboard, Key press e Key
release event -
Mouse event -
Normal step event - (ora tutte le instance vengono
spostate nelle loro nuove posizioni) - Collision event - End step event - Drawing event
I creation,
destroy e other event vengono eseguiti nel momento in cui
vengono chiamati.
By Mark Overmars
Capitolo 11
|