Actionscript 3.0: tutto con l’operatore new

Giovedì 31 Gennaio, 2008

Sempre nell'ottica di "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 dedicati alla creazione di particolari oggetti, come: createEmptyMovieClip() o il famosissimo attachMovie(). Con Actionscript 3.0 l'operatore new è sufficiente a svolgere tutte le operazioni di creazione. Un nuovo MovieClip, ad esempio, viene creato (runtime) con il seguente codice:

Actionscript:
  1. var mioClip:MovieClip = new MovieClip();
  2. addChild(mioClip);

image Ma veniamo al dunque! Se ho un simbolo nella libreria e voglio aggiungerlo runtime come procedo se attachMovie() è scomparso? La soluzione non è molto dissimile da quello che accadeva in Actionscript 2.0. Prima di tutto bisogna andare nel pannello di libreria, selezionare il simbolo e aprire la finestra proprietà. A questo punto spuntare la casella di concatenamento Esporta per ActionScript - come accadeva in Flash 8. Un simbolo di libreria ha sempre come Classe base flash.display.MovieClip, ma questo non ci interessa granchè. La cosa interessante, invece, è il parametro Classe che viene impostato di default (quando si spunta Esporta per ActionScript) con il nome del simbolo. Quello che è importante sottolineare è che questa è una nuova modalità di Flash CS3 (e quindi ActionScript 3.0). Il simbolo, per essere esportato, deve avere una Classe di riferimento. La curiosità risiede nel fatto che non siamo costretti a creare per forza una nostra Classe (estesa da flash.display.MovieClip), anche se potremmo farlo.

Infatti la classe "Wall1" - anche se non esiste - verrà generata da Flash durante la compilazione. In pratica è come se il compilatore creasse un file chiamato Wall1.as, lo posizionasse sulla root del nostro progetto con il codice seguente:

Actionscript:
  1. package {
  2.     import flash.display.MovieClip;
  3.     public class Wall1 extends flash.display.MovieClip {
  4.         function Wall1() {}
  5.     }
  6. }

Insomma, per farla breve, ora che abbiamo esportato Wall1? Per creare il nostro simbolo runtime, come si faceva una volta con attachMovie(), basta scrivere:

Actionscript:
  1. var mioClip:Wall1 = new Wall1();
  2. addChild(mioClip);

Difetti?

Voglio tuttavia sottolineare una differenza sostanziale ed importante rispetto alla precedente versione di ActionScript. In ActionScript 2.0 si poteva creare una classe (estesa da MovieClip) e associarla a uno o più simboli presenti in libreria! Questo, ora, non è più possibile. Ogni simbolo di libreria, infatti, deve avere il parametro Classe (quello impostato a Wall1 nel nostro esempio) univoco. Questo comportamento è ovvio altrimenti come farebbe Flash a sapere quale simbolo istanziare?

Comunque sia, come riproduciamo il comportamento di ActionScript 2.0? In modo assai elegante. Basta, infatti, modificare il parametro Classe base ed inserire la nostra classe che estenderà tutti i simboli che vogliamo. Facciamo un esempio pratico!

Creiamo due simboli in libreria: Simbolo1 e Simbolo2. Impostiamo il primo (Simbolo1) in questo modo:

image

Impostiamo il secondo (Simbolo2) in questo modo:

image

Scriviamo la nostra classe MiaEstensione.as:

Actionscript:
  1. package {
  2.     //
  3.     import flash.display.MovieClip;
  4.     //
  5.     public class MiaEstensione extends flash.display.MovieClip {
  6.         function MiaEstensione() {
  7.         }
  8.         //
  9.         public function MioMetodo() {
  10.             trace("MioMetodo()");
  11.         }
  12.     }
  13. }

Inseriemo questo codice nel primo fotogramma del nostro filmato:

Actionscript:
  1. var pippo:MiaEstensione = new MiaEstensione();
  2. addChild(pippo);
  3. //
  4. pippo.MioMetodo();
  5. //
  6. var pluto:Simbolo2 = new Simbolo2();
  7. pluto.x = 200;
  8. addChild(pluto);
  9. //
  10. pluto.MioMetodo();

Direi fantastico! Non trovate?

Post correlati

6 commenti a: “Actionscript 3.0: tutto con l’operatore new”

  1. getAvatar 1.0 Mercoledì 04 Giugno, 2008 alle 03:01
    Flash CS3: creare un effetto Reflex su qualsiasi MovieClip | Undolog.com ha detto:

    [...] una notevole caratteristica di Actionscript 3.0 (vedi Actionscript 3.0: tutto con l’operatore new) ho creato una classe ReflexMe in grado di generare un effetto “riflessione” su un qualsiasi [...]

  2. getAvatar 1.0 Lunedì 09 Giugno, 2008 alle 23:02
    Kaos ha detto:

    Bene interessantissima la lezione.
    Ma io non posso instanziare un oggetto direttamente dalla classe???
    Ho creato questo codice:

    package Sorgenti.Classi {
        import flash.display.SimpleButton;
        public class Pulsanti extends SimpleButton {
            public function Pulsanti() {
                trace("La classe Pulsanti è stata instanziata corretamente");
                var Puls:Pulsanti = new Pulsanti();
                addChild(Puls);
            }
        }
    }
    

    a me non me lo fa instanziare mi da dei problemi:

    1180: Chiamata al metodo non definito addChild.
  3. getAvatar 1.0 Martedì 10 Giugno, 2008 alle 09:49
    Giovambattista Fazioli ha detto:

    @Kaos: non ti funziona in quanto la tua classe Pulsanti, estende una classe SimpleButton che non è un contenitore, quindi non possiede il metodo addChild().
    Comunque, in linea generale, non puoi istanziare “te stesso” in quanto crei un ciclo infinito che bloccherebbe la macchina!
    La cosa migliore da fare è creare un classe ulteriore, estesa da Sprite o MovieClip che al suo interno usa la tua classe Pulsanti!

  4. getAvatar 1.0 Martedì 10 Giugno, 2008 alle 20:11
    Kaos ha detto:

    Grazie mille Giovanbattista ora funziona tutto

  5. getAvatar 1.0 Martedì 12 Agosto, 2008 alle 17:31
    L’IDE di Flash CS3 | Marcello Surdi ha detto:

    [...] Actionscript 3.0: tutto con l’operatore new [...]

  6. getAvatar 1.0 Mercoledì 03 Settembre, 2008 alle 13:08
    Guida ActionScript 3 in Flash CS3: oggetti di visualizzazione dinamici | Marcello Surdi ha detto:

    [...] Actionscript 3.0: tutto con l’operatore new [...]

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