ActionScript 3 e il problema _ROOT
Questo AS 3.0 è veramente un gran passo avanti per tutti i Flash developer, non solo per l’aumento delle performance grazie alla nuova struttura ma soprattutto per la flessibilità e la somiglianza con linguaggi più evoluti come Java e C#.
Per farvene ancor meglio un’idea vi consiglio la visione di un simpatico filmato di GSkinner, 50 REASONS AS3 KICKS ASS, dove sono elencati e brevemente spiegati i cambiamenti e miglioramenti più importanti apportati da Adobe nell’ultima versione del linguaggio.
Ma è indubbio che il passaggio sia stato traumatico per molti, sia per la diversa forma mentis da adottare nello sviluppare che per gli enormi cambiamenti nelle classi e nei metodi nonchè l’eliminazione e la sostituzione di alcuni di questi.
Credo che tutti, passando dalla versione 2.0 alla successiva dello script, abbiano notato l’assenza dell’istanza globale _ROOT, con cui si era soliti fare riferimento a metodi e variabili dichiarate nella timeline principale.
Per chi se ne intende di programmazione e già preferiva, prima di questa evoluzione, creare classi separate piuttosto che scrivere codice dentro il filmato stesso probabilmente non sarà stato difficile individuare una soluzione al problema ma dato che Flash è destinato, almeno finora, più ai web designer che ai programmatori credo possa tornare utile questo semplice metodo per sopperire alla mancanza del nostro amato oggetto globale _ROOT.
Questo è il codice sulla timeline principale che vogliamo richiamare dal movieclip esterno Director:
function avanti(){
//spostiamo al frame 2 la timeline principale
this.gotoAndPlay(2);
}
In ActionScript 2 sarebbe stato facile, nelle azioni sulla timeline di Director avremmo scritto:
ma _root non esiste più, in alternativa quindi scriveremo nella timeline principale:
var istanza_director.root_mc = this;
e nel movieclip Director:
var root_mc;
…
//chiamiamo il metodo
root_mc.avanti();
Cosa abbiamo fatto?
Sulla timeline principale abbiamo valorizzato una variabile passando come valore l’istanza della timeline stessa, quindi il vecchio _root e sul movieclip prima abbiamo dichiarato la variabile per evitare l’errore a runtime e con quella variabile, a runtime valorizzata, richiamato il metodo che sposta al frame 2.
Con questa semplice soluzione abbiamo a disposizione tutti i metodi e le proprietà di _root ma nel caso non ci servissero e volessimo risparmiare le risorse, per richiamare solamente la funzione potremmo cambiare il codice così:
Nella timeline principale:
var istanza_director.root_avanti = avanti();
e nel movieclip:
var root_mc;
…
//chiamiamo il metodo
root_mc();
Ancora più semplice e veloce!
Cerca: actionscript esempi, as3 -root, passaggio as2 as3, tutorial flash, variabili, web facileRitieni questo post utile o interessante?
Condividi
Leggi anche:
