Flash CS3: la nuova gestione degli eventi

Mercoledì 19 Dicembre, 2007

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:

Actionscript:
  1. // Events
  2. import flash.events.KeyboardEvent;
  3. import flash.events.MouseEvent;
  4. 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:

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

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

Actionscript:
  1. import flash.events.Event;
  2.  
  3. public class MiaClasse extends MovieClip {
  4.  
  5.     function MiaClasse() {
  6.         addEventListener (Event.ADDED_TO_STAGE, _init);
  7.     }
  8.     //
  9.     private function _init(e:Event):void {
  10.         ...
  11.     }
  12. }

La gestione della tastiera in un TextFiled è:

Actionscript:
  1. import flash.events.KeyboardEvent;
  2. ...
  3. text_txt.addEventListener (KeyboardEvent.KEY_DOWN, _onKeyDown);
  4.  
  5. function _onKeyDown (e:KeyboardEvent):void {
  6.     if (e.keyCode == 13) {
  7.         ...
  8.     }
  9. }

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:

Actionscript:
  1. import flash.events.KeyboardEvent;
  2. ...
  3. text_txt.addEventListener (KeyboardEvent.KEY_DOWN, _onKeyDown);
  4.  
  5. function _onKeyDown (e:KeyboardEvent):void {
  6.      if (e.keyCode == 13) {
  7.          var me:Event = new Event("RETURN");
  8.                 this.dispatchEvent (me);
  9.     }
  10. }

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

Actionscript:
  1. myTextFieldExt.addEventListener("RETURN", _onReturn);
  2. ...
  3. function _onReturn(e:Event):void {
  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 ;).

Post correlati

Un commento a: “Flash CS3: la nuova gestione degli eventi”

  1. getAvatar 1.0 Martedì 15 Aprile, 2008 alle 19:06
    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 [...]

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>

Usa <pre> per racchiudere codice