About
Documenti
Game
Staff
Contact




Saint Saga
VGMaker Italia
Game Maker Resorces
TMW Team
Fantasy Community
Rmk2 World Making
Asgard Project
Mugeneration
DragonMugen

 

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