Nozioni di base sulla gestione degli eventi

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

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.