Eventi

Game Maker usa il così detto approccio guidato dagli eventi.

Funziona in questo modo.

  • Ogni volta che nel gioco succede qualcosa le istanze degli oggetti ricevono eventi (sorta di messaggi che dicono che è successo qualcosa).
  • Le istanze possono allora reagire a questi messaggi eseguendo delle azioni.

Per ogni oggetto si deve indicare a quali eventi risponde e quali azioni deve eseguire quando gli eventi si verificano.

Può sembrare complicato ma è veramente semplice.
Prima di tutto, per la maggior parte degli eventi gli oggetti non devono fare niente.
Per gli eventi che provocano qualcosa da fare si può usare un approccio molto semplice di tipo drag-and-drop per specificare le azioni.
Al centro della finestra delle proprietà dell’oggetto c’è una lista di eventi ai quali l’oggetto deve reagire.
Inizialmente è vuota.
Aggiungi gli eventi premendo il pulsante Add Event.
Apparirà una finestra con tutti i tipi di eventi.
Da questa seleziona l’evento che vuoi aggiungere.
In alcuni casi compare un menu con ulteriori scelte.
Per esempio, per l’evento tastiera, Keyboard, dovrai selezionare il tasto.
Più avanti è presente una lista completa di tutti i tipi di eventi con le corrispondenti descrizioni.
Seleziona un evento dalla lista.
Questo è l’evento che stai modificando.
Per modificare l’evento selezionato basta cliccarci sopra.
A destra ci sono tutte le azioni rappresentate da piccole icone.
Sono raggruppate in diverse schede.
Tra l’elenco degli eventi e le azioni c’è l’elenco delle azioni.
Contiene le azioni che devono essere eseguite per l’evento corrente.
Per aggiungere azioni alla lista, trascinale con il mouse da destra verso la lista.
Saranno sistemate una dopo l’altra, con una breve descrizione.
Per ogni azione ti sarà richiesto di fornire alcuni parametri.

imageDopo che avrai aggiunto delle azioni la situazione potrebbe essere la seguente:

Ora puoi passare ad aggiungere azioni a un altro evento.
Seleziona l’evento che ti interessa con il pulsante sinistro del mouse e trascina le azioni nella sua lista.

L’ordine delle azioni nella lista può essere modificato con operazioni di drag-and-drop.
Premendo il tasto Alt mentre trascini, fai una copia dell’azione.
Si può fare drag-and-drop anche tra liste di oggetti diversi.
Se agisci con il pulsante destro del mouse su un’azione, appare un menu nel quale puoi eliminare l’azione selezionata (si può fare anche utilizzando il tasto Canc) oppure copiare e incollare azioni.
Puoi selezionare più azioni per fare taglia/copia/incolla premendo il tasto Shift oppure Ctrl.
Per selezionare tutte le azioni premi Ctrl A.

Quando mantieni il mouse vicino a un’azione, viene data una descrizione più lunga dell’azione.

Per eliminare l’evento attualmente selezionato insieme a tutte le sue azioni utilizza il pulsante con l’etichetta Delete.
Gli eventi senza azioni saranno eliminati automaticamente quando chiuderai la finestra e quindi non c’è bisogno di farlo manualmente.
Se vuoi assegnare le azioni a un evento diverso (per esempio, perché hai deciso di usare un tasto diverso per loro) premi il pulsante con l’etichetta Change e seleziona il nuovo evento desiderato.
L’evento non deve essere già definito!
Utilizzando il menu contestuale puoi anche duplicare un evento, cioè aggiungere un nuovo evento con le stesse azioni.

Come specificato prima, per aggiungere un evento, premi il pulsante Add Event.

imageAppare la seguente finestra:

Qui seleziona l’evento che vuoi aggiungere.
In alcuni casi compare un menu con ulteriori scelte.

image Create

Questo evento avviene quando viene creata una istanza dell’oggetto.
Si usa normalmente per impostare l’istanza in movimento e/o impostare delle variabili dell’istanza.

image Destroy

Questo evento avviene quando l’istanza viene eliminata.
Per essere precisi, avviene appena prima che sia eliminata, in modo che l’istanza esista quando avviene l’evento!
Per la maggior parte delle volte non si usa questo evento ma puoi usarlo, per esempio, per cambiare il punteggio o per creare un nuovo oggetto.

image Alarm

Ogni istanza possiede 12 allarmi.
Puoi settare questi allarmi utilizzando delle azioni.
L’allarme conteggia finché non raggiunge 0 e in quel momento genera un evento di allarme.
Per specificare le azioni per un certo allarme devi prima selezionarlo nel menu.
Gli allarmi sono molto utili.
Puoi usarli per fare in modo che certe cose avvengano di tanto in tanto.
Per esempio un mostro può cambiare direzione del movimento ogni 20 passi.
In questi casi una delle azioni nell’evento deve impostare di nuovo l’allarme.

image Step

The step event happens every step of the game. Here you can put actions that need to be executed continuously.
For example, if one object should follow another, here you can adapt the direction of motion towards the object we are following.
Be careful with this event though.
Don’t put many complicated actions in the step event of objects of which there are many instances.
This might slow the game down.
To be more precise, there are three different step events.
Normally you only need the default one.
But using the menu you can also select the begin step event and the end step event.

  • The begin step event is executed at the beginning of each step, before any other events take place.
  • The normal step event is executed just before the instances are put in their new positions.
  • The end step event is executed at the end of the step, just before the drawing.
    This is typically used to change the sprite depending on the current direction.

image Collision

Ogni volta che due istanze si toccano (le due immagini si sovrappongono) si presenta un evento di collisione.
Per la precisione, avvengono due eventi di collisione, uno per ciascuna istanza.
L’istanza può reagire all’evento di collisione.
A questo scopo scegli dal menu l’oggetto con il quale vuoi definire l’evento collisione.
Quindi ci inserisci l’azione.
C’è una differenza in quello che succede quando le istanze si scontrano con un oggetto solido o con un oggetto non solido.
Prima di tutto, se nell’evento collisione non ci sono azioni allora non succede nulla: l’istanza attuale continua a muoversi, anche nel caso in cui l’altro oggetto sia solido!
Quando l’evento collisione contiene delle azioni ecco cosa succede:

  • When the other object is solid, the instance is placed back at its previous place (before the collision occurs). Then the event is executed. Finally, the instance is moved to its new position. So if the event e.g. reverses the direction of motion, the instance bounces against the wall without stopping. If there is still a collision, the instance is kept at its previous place. So it effectively stops moving.
  • When the other object is not solid, the instance is not put back. The event is simply executed with the instance at its current position. Also, there is no second check for a collision. If you think about it, this is the logical thing that should happen. Because the object is not solid, we can simply move over it. The event notifies us that this is happening.

Ci sono diversi utilizzi per l’evento collisione.

  • Le istanze possono utilizzarlo per rimbalzare contro i muri.
  • Puoi utilizzarlo per distruggere gli oggetti, per esempio, quando sono colpiti da un proiettile.

image Keyboard

Quando il giocatore preme un tasto si verifica un evento della tastiera per tutte le istanze di tutti gli oggetti.
C’è un evento diverso per ogni tasto.
Nel menu puoi selezionare il tasto per il quale vuoi definire l’evento della tastiera e poi ci trascini le azioni.
Chiaramente soltanto pochi oggetti necessitano di eventi e per pochi tasti.
Ottieni un evento a ogni passo finché il giocatore mantiene il tasto abbassato.
Ci sono due eventi speciali della tastiera

  • No key, questo evento si verifica in ogni passo quando nessun tasto è premuto.
  • Any key, si verifica qualunque sia il tasto premuto.

Quando il giocatore preme più tasti si verificano gli eventi per tutti i tasti premuti.
Osserva che i tasti del tastierino numerico producono gli eventi corrispondenti soltanto se è premuto il NumLock.

image Mouse

Un evento del mouse si verifica per un’istanza ogni volta che il puntatore del mouse cade all’interno della sprite che rappresenta l’istanza.
In funzione di quali tasti del mouse sono premuti otterrai un evento no / left / right / middle button.
Gli eventi dei tasti del mouse sono generati a ogni passo finché l’utente mantiene il tasto premuto.

  • Gli eventi press sono generati soltanto una volta quando il tasto viene abbassato.
  • Gli eventi release sono generati soltanto quando il tasto viene rilasciato.

Osserva che questi eventi si verificano soltanto quando il mouse è sopra l’istanza.
Se vuoi reagire agli eventi press o release del mouse in un punto qualsiasi utilizza gli eventi globali del mouse che si trovano in un sottomenu.
Ci sono due eventi del mouse speciali.

  • L’evento enter avviene quando il mouse entra sull’istanza.
  • L’evento leave avviene quando il mouse lascia l’istanza.

Questi eventi sono utilizzati tipicamente per cambiare l’immagine oppure eseguire qualche suono.
Gli eventi wheel up e wheel down avvengono quando l’utente muove la rotellina del mouse.
Infine ci sono un certo numero di eventi per il joystick.
Puoi specificare le azioni per le 4 direzioni principali del joystick (in direzione diagonale si verificano entrambi).
Inoltre puoi definire fino a 8 azioni per i tasti del joystick.
Puoi fare tutto questo sia per il joystick primario che per il secondario.

image Other

Ci sono altri eventi che possono essere utili in certi giochi. Si trovano in questo menu.
Puoi trovare i segeuenti eventi:
Outside room

Questo evento si verifica quando l’istanza risiede completamente fuori dal livello.
Questo è tipicamente il momento giusto per distruggerla.

Intersect boundary

Questo evento si verifica quando l’istanza incrocia il limite del livello.

Game start

Questo evento si verifica per tutte le istanze che si trovano nel primo livello quando parte il gioco.
Avviene prima dell’evento Room start ma dopo degli eventi Create delle istanze nel livello.
Questo evento è definito tipicamente in un unico oggetto controllore e si utilizzaq per far partire la musica di sottofondo e per inizializzare alcune variabili oppure per caricare dei dati.

Game end

Questo evento si verifica per tutte le istanze quando il gioco finisce.
Di nuovo un solo oggetto definisce tipicamente questo evento.
Si utilizza, per esempio, per memorizzare dei dati in un file.

Room start

Questo evento si verifica per tutte le istanze in un livello quando il livello inizia.
Avvine dopo gli eventi Create.

Room end

Questo evento si verifica per tutte le istanze esistenti quando un livello finisce.

No more lives

GameMaker ha un sistema integrato per le vite.
C’è un’azione per impostare e cambiare il numero di vite.
Ogni volta che il numero di vite diventa minore o uguale a zero si verifica questo evento.
Si utilizza tipicamente per terminare o far ripartire il gioco.

No more health

GameMaker ha un sistema integrato per la salute.
C’è un’azione per impostare e cambiare la salute.
Ogni volta che la salute diventa minore o uguale a zero si verifica questo evento.
Si utilizza tipicamente per ridurre il numero di vite o per far ripartire il gioco.

Animation end

Come detto prima, un’animazione consiste di un certo numero di immagini che vengono visualizzate una dopo l’altra.
Dopo che l’ultima viene visualizzata si riparte di nuovo con la prima.
L’evento si verifica precisamente in questo momento.
Per esempio, può essere utilizzato per cambiare l’animazione oppure per distruggere l’istanza.

End of path

Questo evento si verifica quando l’istanza segue un percorso e raggiunge la fine del percorso.

Close button

Questo evento si verifica quando l’utente clicca sul pulsante di chiusura della finestra.
Avviene soltanto se disabiliti, nelle impostazioni del gioco, l’opzione per avere il pulsante di chiusura come tastoEsc.

User defined

Ci sono 16 di questi eventi.
Essi normalmente non avvengono mai a meno che non li richiami da codice.

image Draw

Le istanze, quando sono visibili, disegnano la loro sprite sullo schermo a ogni passo.
Quando specifichi azioni nell’evento di disegno, la sprite non viene disegnata e invece vengono eseguite queste azioni.
Può essere usato per per disegnare qualcosa di diverso dalla sprite o per fare dei cambiamenti sui parametri della sprite.
Ci sono un certo numero di azioni di disegno che sono specifiche per essere utilizzate nell’evento di disegno.
Osserva che l’evento di disegno viene eseguito solo se l’oggetto è visibile.
Inoltre osserva che, indipendentemente da cosa disegni, gli eventi di collisione si basano sulla sprite che è associata all’istanza.

image Key press

Questo evento è simile a quello della tastiera ma avviene solo una volta quando si abbassa il tasto piuttosto che continuamente.
Questo è utile quando vuoi che un’azione avvenga una sola volta.

image Key release

Questo evento è simile a quello della tastiera ma avviene solo una volta quando il tasto viene rilasciato piuttosto che continuamente.

In alcune situazioni è importante capire l’ordine con cui Game Maker elabora gli eventi.
Avviene come segue:

  • Begin step …
  • Alarm …
  • Keyboard … / Key press … / Key release …
  • Mouse …
  • Normal step …
  • Tutte le istanze sono impostate alla loro nuova posizione
  • Collision …
  • End step …
  • Draw ….

Gli eventi come CreateDestroy, … sono elaborati quando i fatti corrispondenti accadono.