Questo ActionSript 3 è 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!
Ritieni questo post utile o interessante?
Condividi e Segnala
Leggi anche:
dei commenti -
lascia un commento - trackback







Premetto che sono alle prime armi con flasc as3,da vari giorni sto cercando informazioni sui percorsi target;questo argomento in as2 lo avevo capito ma ora con as3 tutto è diventato difficile.
Dopo innumerevoli ricerche finalmente mi sono imbattuto nel vstro tutorial cheho tentato di realizzare ma,purtroppo mi dà errore
1086: Errore di sintassi: è previsto un punto e virgola prima di dot.
Per me sarebbe molto comodo se qualcuno potesse correggere il file seguente:
Nel 1^ FTG ho inserito un campo di testo con nome T1 mentre nel FTG 5^ vi è un campo di testo con nome T2 + 2 pulsanti ,Pul1 e Pul2. Al clic su Pul1 appare 1 nel T2 e si incrementa ad ogni clic; contemporaneamente in T1 dovrebbe apparire lo stesso n. che appare in T2, ma non succede nulla e ottengo errore 1009.
Grazie infinite- federico.
stop();
function aumenta(event:MouseEvent){
t2.text=a+=1;
root.t1.text=a;
}
pul.addEventListener(MouseEvent.CLICK,aumenta);
function ritorna(event:MouseEvent){
gotoAndStop(1)
}
p2.addEventListener(MouseEvent.CLICK,ritorna);
la spiegazione non fà una piega, ma neanche a me sembra funzionare. Forse non ci è chiaro cosa effettivamente scrivere sulla timeline e nel movieclip.
Da quanto ho capito bisogna scrivere nella timeline:
//la funzione sulla timeline principale che vogliamo richiamare dal movieclip Director
function avanti(){
//spostiamo al frame 2 la timeline principale
this.gotoAndPlay(2);
}
ed anche / oppure (???)
//nome dell’istanza di Director in cui valorizziamo la variabile root_mc
var istanza_director.root_mc = this;
comunque sia, dà errore di sintassi
era utile avere un file d’esempio da poter scaricare…