Si considera un evento una qualsiasi attività che avviene nel file SWF e che riveste un qualche interesse per il programmatore. La maggior parte dei file SWF supporta, ad esempio, qualche tipo di interazione con l'utente, dalla semplice risposta a un clic del mouse fino a reazioni molto più complesse, come accettare ed elaborare i dati inseriti in un modulo. Tutte le interazioni di questo tipo che avvengono tra l'utente e il file SWF sono considerate eventi. Inoltre, si possono verificare degli eventi anche in assenza di interventi diretti da parte dell'utente; ad esempio quando termina il caricamento di dati da un server o quando una fotocamera collegata al computer diventa attiva.
In ActionScript 3.0, ogni evento è rappresentato da un oggetto evento, cioè da un'istanza della classe Event o di una delle sue sottoclassi. Oltre a memorizzare informazioni relative a un evento specifico, un oggetto evento contiene metodi che facilitano la manipolazione dell'oggetto stesso. Quando Flash Player o AIR rileva, ad esempio, un clic del mouse l'applicazione crea un oggetto evento che rappresenta quel particolare evento clic del mouse.
Dopo aver creato un oggetto evento, Flash Player o AIR
invia
l'oggetto, vale a dire lo trasmette, all'oggetto che costituisce il destinatario dell'evento. Un oggetto che funge da destinazione per un oggetto evento inviato viene definito
destinatario dell'evento
. Quando, ad esempio, una fotocamera collegata diventa attiva, Flash Player invia un oggetto evento direttamente all'oggetto che rappresenta la fotocamera, vale a dire al destinatario dell'evento. Tuttavia, se il destinatario dell'evento è presente nell'elenco di visualizzazione, l'oggetto evento viene fatto scorrere attraverso la gerarchia dell'elenco di visualizzazione finché non raggiunge il destinatario designato. In alcuni casi, l'oggetto evento ripercorre il suo cammino in senso inverso e risale la gerarchia dell'elenco di visualizzazione. Questo attraversamento nei due sensi della gerarchia dell'elenco di visualizzazione è denominato
flusso di eventi
.
L'aggiunta di listener di eventi al codice permette di “catturare” gli oggetti evento. I
listener di eventi
sono infatti funzioni o metodi scritti per rispondere a eventi specifici. Per fare in modo che il programma risponda agli eventi, è necessario aggiungere dei listener di eventi al destinatario dell'evento o agli oggetti dell'elenco di visualizzazione che fanno parte del flusso di eventi dell'oggetto.
Il codice per la creazione di listener di eventi deve sempre seguire questa struttura di base (gli elementi in grassetto sono segnaposti modificabili a seconda del caso specifico):
function eventResponse(eventObject:EventType):void
{
// Actions performed in response to the event go here.
}
eventTarget.addEventListener(EventType.EVENT_NAME, eventResponse);
Questo esempio di codice esegue due compiti. Innanzi tutto definisce una funzione, ovvero specifica le azioni che devono avvenire in risposta all'evento. In secondo luogo, chiama il metodo
addEventListener()
dell'oggetto source, in pratica associando la funzione all'evento, in modo che quando si verifica l'evento vengono attivate le azioni descritte nella funzione. Quando l'evento si verifica, il destinatario dell'evento esamina l'elenco delle funzioni e dei metodi registrati come listener dell'evento e chiama ognuno passando l'oggetto evento come parametro.
Per creare il proprio listener di eventi, è necessario modificare quattro valori in questo codice. Per cominciare, sostituite il nome della funzione con il nome che desiderate usare (la modifica deve essere applicata in due punti in corrispondenza di
eventResponse
). In secondo luogo, specificate il nome della classe dell'oggetto inviato dall'evento che intendete monitorare (
EventType
nel codice) e specificate la costante appropriata per l'evento specifico (
EVENT_NAME
nell'elenco). Quindi, effettuate una chiamata al metodo
addEventListener()
sull'oggetto che invierà l'evento (
eventTarget
nel codice). Infine, in via facoltativa, cambiate il nome della variabile utilizzata come parametro della funzione (
eventObject
nel codice).
Concetti e termini importanti
L'elenco di riferimento seguente contiene termini importanti che vengono citati durante la scrittura di routine di gestione degli eventi:
-
Bubbling
-
Il bubbling si verifica per alcuni eventi in modo che un oggetto di visualizzazione principale possa rispondere agli eventi inviati dal relativo oggetto secondario.
-
Fase di bubbling
-
La parte del flusso di eventi in cui un evento si propaga fino agli oggetti di visualizzazione principali. La fase di bubbling si verifica dopo le fasi di acquisizione e target.
-
Fase di cattura
-
La parte del flusso di eventi in cui un evento si propaga dall'oggetto target più generale a quello più specifico. La fase di cattura si verifica prima delle fasi target e bubbling.
-
Comportamento predefinito
-
Alcuni eventi sono configurati con un comportamento attivato automaticamente denominato comportamento predefinito. Se, ad esempio, un utente digita un testo in un campo di testo, viene attivato un evento text input. Il comportamento predefinito di questo evento consiste nel visualizzare il carattere digitato sulla tastiera all'interno del campo di testo. È possibile disattivare tale comportamento se per qualche motivo non si desidera visualizzare sullo schermo il testo digitato.
-
Invio
-
Notifica inviata ai listener di eventi per comunicare che si è verificato un evento.
-
Evento
-
Qualsiasi avvenimento che si verifica su un oggetto e di cui l'oggetto può informare altri oggetti.
-
Flusso di eventi
-
Quando si verifica un evento su un oggetto dell'elenco di visualizzazione, cioè su un oggetto visualizzato sullo schermo, tutti gli oggetti che contengono quell'oggetto vengono informati dell'evento e, a loro volta, notificano i rispettivi listener di eventi. Questo processo parte dallo stage e prosegue lungo l'elenco di visualizzazione fino a raggiungere l'oggetto in cui si è verificato l'evento e poi riparte per tornare allo stage. Tale processo è definito flusso di eventi.
-
Oggetto evento
-
Oggetto che contiene informazioni sull'occorrenza di un particolare evento e che viene inviato a tutti i listener nel momento in cui un evento viene inviato.
-
Destinatario dell'evento
-
Oggetto che esegue l'invio dell'evento. Se, ad esempio, l'utente seleziona un pulsante all'interno di un oggetto Sprite che a sua volta si trova sullo stage, tutti questi oggetti inviano eventi, ma l'unico destinatario dell'evento è quello in cui l'evento si è verificato, vale a dire il pulsante selezionato.
-
Listener
-
Oggetto o funzione registrata presso un oggetto a indicare che deve essere notificato se si verifica un evento specifico.
-
Fase target
-
Il punto del flusso di eventi in cui un evento ha raggiunto l'oggetto target più specifico possibile. La fase target si verifica tra le fasi di acquisizione e di bubbling.