Flash CS3: la nuova gestione degli eventi
Mercoledì 19 Dicembre, 2007Finalmente 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:
-
// 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:
-
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:
-
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 è:
-
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:
-
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:
-
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 ;).





















Actionscript 3.0: tutto con l’operatore new | Undolog.com ha detto:
[...] “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 [...]