Flash CS3: la nuova gestione degli eventi

Finalmente con ActionScript 3.0 non abbiamo più due diverse gestioni di eventi come accadeva prima di ActionScript 2.0 (vedi: Gestione degli eventi: similitudini tra Flash e Javascript). Il metodo addEventListener(), onnipresente nella nuova architettura, permette di gestire in modo nuovo e straordinariamente pulito tutti gli eventi possibili, anche quelli personali. La nuova organizzazione in package permette di importare gli eventi che ci servono e trattarli tutti allo stesso modo:

1
2
3
4
// Events
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.events.Event;

Le differenze tra la gestione degli eventi sono quindi scomprase. Un MovieClip non ha più le pseudo-proprietà evento come onRelease o onEnterFrame. Il classico RollOver, ad esempio, diventa:

1
2
3
4
5
mio_mc.addEventListener (MouseEvent.ROLL_OVER, listener);
...
function listener(e:MouseEvent):void {
    ...
}

La soluzione proposta in Flash: come inizializzare componenti nel costruttore di una classe, ad esempio, viene risulta in ActionScript 3.0 in questo modo:

1
2
3
4
5
6
7
8
9
10
11
12
import flash.events.Event;

public class MiaClasse extends MovieClip {

    function MiaClasse() {
        addEventListener (Event.ADDED_TO_STAGE, _init);
    }
    //
    private function _init(e:Event):void {
        ...
    }
}

La gestione della tastiera in un TextFiled è:

1
2
3
4
5
6
7
8
9
import flash.events.KeyboardEvent;
...
text_txt.addEventListener (KeyboardEvent.KEY_DOWN, _onKeyDown);

function _onKeyDown (e:KeyboardEvent):void {
    if (e.keyCode == 13) {
        ...
    }
}

Questa nuova gestione degli eventi, nuova per ActionScript ma nota a chi lavora in Javascript ad esempio (merito di ECMAScript 4), si riflette anche nella gestione e produzione di eventi propri. Immaginiamo di creare una classe TextFieldExt, una estensione del classico TextField, e vogliamo fare in modo che quando viene premuto in tasto {INVIO} durante la digitazione viene rilasciato un nostro personale evento. Prima di tutto costruiamo il nostro MovieClip con un TextField a bordo che chiamiamo text_txt. Come visto in precedenza associaciamo un listener a questo controllo e generiamo un nostro evento personale in modo semplice:

1
2
3
4
5
6
7
8
9
10
import flash.events.KeyboardEvent;
...
text_txt.addEventListener (KeyboardEvent.KEY_DOWN, _onKeyDown);

function _onKeyDown (e:KeyboardEvent):void {
     if (e.keyCode == 13) {
         var me:Event = new Event("RETURN");
                this.dispatchEvent (me);
    }
}

Quando andremo ad usare la nostra istanza del TextFieldExt potremmo scrivere:

1
2
3
4
5
myTextFieldExt.addEventListener("RETURN", _onReturn);
...
function _onReturn(e:Event):void {
    ...
}

Dove è myTextFieldExt è un’instanza della nostra classe TextFieldExt. Ultima cosa, non meno importante, come indicato nella Guida interna di Flash CS3, è possibile ovviamente creare degli eventi personalizzati come classi, cioè nostre classi che estendono la classe Event; quindi in maniera più completa e particolareggiata. Come la classe Alarm proposta nella Guida… ma questo lo vedremo un’altra volta ;) .

Un commento a: “ ”

  1. 15 apr, 2008 Actionscript 3.0: tutto con l’operatore new | Undolog.com:

    [...] “uniformare”, come già accaduto con gli eventi (vedi La nuova gestione degli eventi di Flash CS3 e Flash CS3: la nuova gestione degli eventi), una delle tante novità presenti in Actionscript 3.0 è la scomparsa di tutti quei metodi ad hoc [...]

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre> // blocco generico
                   <code></code> // blocco generico
                   [cc_actionscript][/cc_actionscript] // Actionscript
                   [cc_actionscript3][/cc_actionscript3] // Actionscript 3
                   [cc_css][/cc_css] // CSS Style Sheet
                   [cc_html][/cc_html] // HTML
                   [cc_js][/cc_js] // Javascript
                   [cc_objc][/cc_objc] // Objective-C
                   [cc_php][/cc_objc] // PHP
                   [cc_sql][/cc_sql] // SQL