Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

this.root - trucco del giorno

This is a discussion on this.root - trucco del giorno within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Eccoci ad n altro trucchetto che può risultare molto utile. Questo articolo prende spunto da questa discussione: Document Class Abbiamo ...


Go Back   Forum Flash CS3 Flash CS4 > Flash CS3 e Actionscript 3.0 > Articoli e tutorials

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 21-09-07, 16:20
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
this.root - trucco del giorno

Eccoci ad n altro trucchetto che può risultare molto utile.
Questo articolo prende spunto da questa discussione: Document Class
Abbiamo visto fino ad oggi che spesso dobiamo passare il valore della root principale della nostra applicazione dalla Document Class alle alle classi che compongono la nostra applicazione.
Questo perchè alle volte necessitiamo di recuperare una MovieClip che abbiamo sullo Stage e quindi se non avessimo quel valore passato dalla Document Class non riusciremmo a risalire alla MovieClip.
In poche parole, con Actionascript 2.0 era facile, bastava dire _root.nomeMovieClip ( cosìdetta Composition ) che da qualsiasi classe si risaliva ad una MovieClip sullo Stage.
Con Actionscript 3.0 _root è stata rimossa dato che l' intero concetto di livelli e timeline è stato cambiato.
Faccio un esempio:
ho main.fla al quale è associata la Document Class Main.as e sullo Stage ho una MovieClip che chiamo test_mc. Nella libreria di main.fla ho un' altra MovieClip, associata ad una classe ( linkage o identificatore ) chiamata Clip.as, che voglio attaccare ( ex metodo attachMovie ) dalla Document Class.
Vediamolo...*

Creo un FLA che salvo con nome ' main.fla ' .
Al suo interno creo una MovieClip che istanzio sullo Stage e gli associo nome istanza ' test_mc '.
Creo un' altra MovieClip , che però lascio in libreria con nome ' mc_clip ', associata tramite linkage ( identificatore ) alla classe Clip.

Ora creo la Document Class che associo a main.fla, un file AS che salvo con nome ' Main.as ', implementata in questo modo:
Code:
package
{
	import flash.display.MovieClip;
	
	public class Main extends MovieClip
	{
		public function Main()
		{
			var clip_mc:MovieClip=new Clip();
			addChild(clip_mc);
			clip_mc.callBack();
		}
	}
}
Creo anche la classe Clip.as, che è associata alla MovieClip mc_clip in libreria di main.fla:
Code:
package
{
	import flash.display.MovieClip;
	
	public class Clip extends MovieClip
	{
		public function Clip()
		{}
		
		public function callBack():void
		{
			var m:MovieClip=this.root as MovieClip;
			m.test_mc.x=0;
			m.test_mc.y=0;
		}
	}
}
Analizziamo cosa succede quando pubblico l' SWF:

- main.fla chiama la Document Class ( Main.as )
- come abbiamo visto nella prima lezione della Object Oriented Programming ( creare la mia prima classe Actionscript 3.0 ), la classe Main esegue subito il codice nella funzione costruttrice:
istanzio la classe Clip che è associata a mc_clip ( in libreria di main.fla )
var clip_mc:MovieClip=new Clip();
la aggiungo allo Stage ( a questo punto abbiamo mc_clip visibile sullo stage )
addChild(clip_mc);
chiamo il metodo callBack che ho implementato nella classe Clip
clip_mc.callBack();
- il metodo callBack vuole spostare le coordinate di test_mc. Per farlo utilizza la proprietà root che restituisce il padre in cui si trova mc_clip ( ricordiamoci che scrivendo nel file Clip.as è come se scrivessimo nella timeline di clip_mc ). Infatti se proviamo con un trace(this.root), l' ouput sarà il seguente: [object Main]. Quindi con this.root risaliamo a Main. Ora, in teoria se scrivessimo this.root.test_mc dovremmo risalire appunto a test_mc ma così non è in quanto Flash restituisce un errore:
1119: Access of possibly undefined property test_mc through a reference with static type flash.display:DisplayObject.
- quindi ecco il trucchetto:
var m:MovieClip=this.root as MovieClip;
m.test_mc.x=0;
m.test_mc.y=0;
forzo this.root a tipizzarsi MovieClip inserendolo in una variabile di tipo MovieClip e a quel punto mi riconosce test_mc e posso interagire completamente.

Stay tuned !
__________________

 


I recommend: Essential Actionscript 3.0

- Non rispondo ai messaggi privati con domande tecniche. Apri una discussione sul forum !
- I do not reply technicians pvt messages. Open a thread !
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #2 (permalink)  
Old 11-12-07, 13:45
Junior Member
 
Join Date: Dec 2007
Posts: 14
Rep Power: 0
lorenz82 is on a distinguished road
Re: this.root - trucco del giorno

Ciao, scusami per il disturbo, non ho capito una cosa, invece di scrivere _root.variabile, devo fare tutto sto casino per trovare un qualcosa che sta sullo stage?

non c'è qualcosa di meno complesso? io ho un movie clip che manda informazioni ad una variabile che è sullo stage, ma non riesco a trovare la variabile senza la _root, come posso fare? sto impazzendo :(
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #3 (permalink)  
Old 11-12-07, 15:15
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: this.root - trucco del giorno

Devi fare esattamente come il mio esempio.

_root non esiste più.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #4 (permalink)  
Old 11-12-07, 15:29
Junior Member
 
Join Date: Dec 2007
Posts: 14
Rep Power: 0
lorenz82 is on a distinguished road
Re: this.root - trucco del giorno

O_O o mio dio non ci posso credere, cioè hanno cambiato la semplice dicitura _root con tutta sta roba? ma davvero non c'è un modo più semplice, io c'ho un migliaio di clip che mandano informazioni ad una variabile sullo stage, dovrei crere 2000 file as?? O.o
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #5 (permalink)  
Old 11-12-07, 15:51
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: this.root - trucco del giorno

Non devi creare un file .as .

Basta che da dentro alla MovieClip usi questa dicitura:

Code:
var my_parent:MovieClip=parent as MovieClip;
trace(my_parent.nomeVariabile);
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

Flash Multi Gallery
  #6 (permalink)  
Old 11-12-07, 17:39
Junior Member
 
Join Date: Dec 2007
Posts: 14
Rep Power: 0
lorenz82 is on a distinguished road
Re: this.root - trucco del giorno

Scusami Flep non voglio romperti le scatole, ma la cosa continua ad essermi molto confusa. Ti spiego un attimo meglio e se vuoi aiutarmi te ne sarei immenasamente grato.
allora:

nella _root cè un campo di testo dinamico che si chiama info_txt.
Sempre nella _root cè un MovieClip che si chiama Mc_A.
All'interno del primo frame della Timeline del MovieClip Mc_A (quindi _root.Mc_A) dichiaro un listener on EnterFrame che scrive su _root.info_txt.

Con AS2 avrei semplicemente messo un testo dinamico sulla root e poi nel movieclip avrei dichiarato OnEnterFrame{_root.info_txt.text="blablabla";}
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #7 (permalink)  
Old 11-12-07, 19:00
Junior Member
 
Join Date: Dec 2007
Posts: 14
Rep Power: 0
lorenz82 is on a distinguished road
Re: this.root - trucco del giorno

trovato si fa cosi, sulla time line del movieclip scrivo:
PHP Code:
this.addEventListener(Event.ENTER_FRAMEonEnterFrame); 
function 
onEnterFrame(event:Event):void 
    
this.root['info_txt'].text this.name

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #8 (permalink)  
Old 12-12-07, 06:50
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: this.root - trucco del giorno

Come hai scritto tu funziona ma è bene precisare che è un metodo non ottimale, anzi direi proprio obsoleto.
Se tu volessi sviluppare sulle classi e rimarresti a quel concetto sbagliato di OOP che parte da actionscript 1.0... sulle classi avrai vita da inferno.
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #9 (permalink)  
Old 10-10-08, 16:43
Junior Member
 
Join Date: Aug 2008
Location: Cesena
Posts: 1
Rep Power: 0
garaving is on a distinguished road
Re: this.root - trucco del giorno

ma se ho una classe come ad esempio questa


package xml{

import flash.display.Loader ;
import flash.display.MovieClip;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.*;
import flash.xml.*

public class CaricaXml extends MovieClip {

private var _loader:URLLoader;
private var _request:URLRequest;
private var mess:String;
public var finito:Boolean;


public function CaricaXml(nome_file :String, messaggio:String)
{
this._loader = new URLLoader;
this._request = new URLRequest(nome_file);
this.mess = messaggio;
_loader.addEventListener(Event.COMPLETE,completo);
_loader.load(_request);
}
private function completo(event:Event):void
{
var myXml:XML = new XML(event.target.data);
}

}

}


e voglio chiamare una funzione al termine del caricamento qundi dentro a
private function completo(event:Event):void
che risiede nel clip principale
come faccio?
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

Reply

Bookmarks

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is On
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump

Similar Threads

Thread Thread Starter Forum Replies Last Post
Trucco del giorno - MovieClip.dropTarget Flep Articoli e tutorials 3 04-09-08 10:37
Trucco del giorno - Loader.content Flep Articoli e tutorials 7 29-06-08 16:24
Trucco del giorno - DisplayObjectContainer.removeChildAt Flep Articoli e tutorials 1 08-06-08 17:43
mouseEnabled di Flash CS3 - trucco del giorno Flep Articoli e tutorials 2 16-01-08 07:30
Trucco del giorno - istanza fantasma Flep Articoli e tutorials 0 20-09-07 15:24


All times are GMT. The time now is 12:53.


Powered by vBulletin versione 3.7.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0 RC4
Forum SiteMap


FlepStudio
by Filippo Lughi
P.IVA 03605860406