ActionScript 3 e il problema _ROOT


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:

//la funzione sulla timeline principale che vogliamo richiamare dal movieclip 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:

_root.avanti();

ma _root non esiste più, in alternativa quindi scriveremo nella timeline principale:

//nome dell’istanza di Director in cui valorizziamo la variabile root_mc
var istanza_director.root_mc = this;

e nel movieclip Director:

//dichiariamo la variabile per evitare l’errore a runtime
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:

//nome dell’istanza di Director in cui valorizziamo la variabile root_mc che rappresenta la funzione
var istanza_director.root_avanti = avanti();

e nel movieclip:

//dichiariamo la variabile per evitare l’errore a runtime
var root_mc;

//chiamiamo il metodo
root_mc();

Ancora più semplice e veloce!

Cerca: , , , , ,

Ritieni questo post utile o interessante?
Condividi

Leggi anche:

Rispondi al post