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 |
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 |
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
.








11
[...] “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 [...]