Ciao a tutti,
stavolta volevo spiegare come sfruttare le proprietà _root e _parent in as3. Se siete dei programmatori di actionscript 2, saprete benissimo quanto possono essere utili queste due proprietà che, stranamente e a prima vista, sembrano scomparire in actionscript 3.
Eppure non è così! Vediamo perchè….
Analizzeremo anche come poter far comunicare fra loro movieclip che si trovano in posizioni non corrispondenti (quali possono essere un movieclip che si trova sulla root e uno che si trova all’interno di 2 altri movieclip contenitori).
Innanzitutto parliamo che tanto desiderato “_root” che in as3 diventa “root”, senza underscore in poche parole, però purtroppo i sviluppatori di Adobe sono anche riusciti a rendere + difficile l’utilizzo di tale proprietà: essa infatti non è + una proprietà associata al MovieClip, ma associata alla classe DisplayObject.
Questa altro non è che una macro classe che contiene quella del MovieClip, infatti quest’ultima ne eredita tutte le proprietà e i metodi. Purtroppo però, in questo modo, quando noi ci colleghiamo alla “root”, essa si collega alla root come DisplayObject. Per fortuna ho pronta una soluzione, vediamo un pò di codice.
trovandoci in un qualsiasi movieclip, possiamo comunicare con la “root” scrivendo:
root.istanza_clip.x = 50;
in questo caso ci stiamo collegando al clip con nome d’istanza “istanza_clip” che si trova sulla nostra root. Il problema è che in questo modo Flash ci dà un errore e non riusciamo ad impostare il nuovo valore di X. L’errore che si visualizza è una roba simile:
1119: Accesso a una proprietà non definita ledStereo mediante un riferimento con tipo statico flash.display:DisplayObject.
Che vuol dire? Che non possiamo impostare delle proprietà caratteristiche di un MovieClip, perchè il collegamento tramite “root” vede il tutto come DisplayObject. Ma cavolo… noi sappiamo che il nostro “istanza_clip” è un MovieClip, perchè allora vederlo per forza e solamente come DisplayObject? Perchè purtroppo il codice non è sicuro che stiamo trattando un MovieClip o un DisplayObject e, considerando che deve saperli trattare entrambi, taglia corto e vede il tutto come fosse la classe + semplice che ovviamente ha meno proprietà e metodi a disposizione, ossia la DisplayObject.
Come fare allora? Semplicemente trasformiamo la DisplayObject in un MovieClip, esistono 2 metodi:
MovieClip(root).istanza_clip.x = 50;
(root as MovieClip).istanza_clip.x = 50;
Usate quello che preferite, ad ogni modo in questo modo possiamo FINALMENTE sfruttare la proprietà “root” anche in Actionscript 3.
Per il “_parent” è un pò la stessa cosa, in as3 diventa “parent” ed è un DisplayObject, però con lo stesso metodo diventa un MovieClip. Ecco un esempio, partendo da un immaginario MovieClip situato all’interno di + MC contenitori:
(this.parent.parent as MovieClip).clip.x = 50;
Spero proprio di avervi dato una mano, per quanto riguarda la teoria e per capire come si sviluppano le proprietà “root” e “stage” (che in as3 non sono la stessa cosa), vi consiglio di guardare qui, un tutorial ottimo in italiano.
Marzo 6th, 2010 at 00:16
Grazie mille per questo suggerimento. Ciao.