Salve a tutti !
Vi ricordate dell' operatore ' instanceof ' di Actionscript 2.0 ?
Non è stato rimosso, ma Adobe consiglia di usare l' operatore ' is ' con
Actionscript 3.0 e Flash CS3.
A cosa serve ?
Direi che è molto utile in situazioni nelle quali bisogna sapere che tipo di oggetti ci sono all' interno di una MovieClip.
Ad esempio, mi è capitato durante lo sviluppo di un carrello per un e-commerce.
Dovevo separare ad un dato evento le MovieClip dai bottoni, dai campi di testo e addirittura dalle Shape.
Vediamo insieme come fare...
Creo un FLA che salvo con nome ' main.fla '.
Al suo interno creo una MovieClip vuota che trascino sullo stage assegnandole nome istanza ' container_mc '.
All' interno di container_mc creo delle altre MovieClip, campi di testo, bottoni e simboli grafici.
Quanti ne voglio e del tipo che volgio, come ad esempio:
Adesso creo la Document Class, un file AS che salvo con nome ' Main.as ', implementata in questo modo:
Code:
package
{
import flash.display.MovieClip;
import flash.display.SimpleButton;
import flash.display.Shape;
import flash.text.TextField;
public class Main extends MovieClip
{
public function Main()
{
countAndSeparate();
}
private function countAndSeparate():void
{
for(var i:int=0;i < container_mc.numChildren;i++)
{
if(container_mc.getChildAt(i) is MovieClip)
{
var clip:MovieClip=container_mc.getChildAt(i) as MovieClip;
trace('io sono una MovieClip e il mio nome è: '+clip.name);
}
if(container_mc.getChildAt(i) is TextField)
{
var field:TextField=container_mc.getChildAt(i) as TextField;
trace('io sono una TextField e il mio nome è: '+field.name);
}
if(container_mc.getChildAt(i) is SimpleButton)
{
var button:SimpleButton=container_mc.getChildAt(i) as SimpleButton;
trace('io sono una SimpleButton e il mio nome è: '+button.name);
}
if(container_mc.getChildAt(i) is Shape)
{
var shape:Shape=container_mc.getChildAt(i) as Shape;
trace('io sono una Shape e il mio nome è: '+shape.name);
}
}
}
}
}
ed ottengo il seguente output:
Quote:
io sono una MovieClip e il mio nome è: clip_0_mc
io sono una MovieClip e il mio nome è: clip_1_mc
io sono una MovieClip e il mio nome è: clip_2_mc
io sono una MovieClip e il mio nome è: clip_3_mc
io sono una MovieClip e il mio nome è: clip_4_mc
io sono una MovieClip e il mio nome è: clip_5_mc
io sono una TextField e il mio nome è: field_0_txt
io sono una SimpleButton e il mio nome è: button_0_btn
io sono una SimpleButton e il mio nome è: button_1_btn
io sono una TextField e il mio nome è: field_1_txt
io sono una TextField e il mio nome è: field_3_txt
io sono una TextField e il mio nome è: field_2_txt
io sono una SimpleButton e il mio nome è: button_2_btn
io sono una Shape e il mio nome è: instance7
io sono una Shape e il mio nome è: instance8
io sono una Shape e il mio nome è: instance9
|
Analizziamo il codice
creo un ciclo con massima iterazione il numero dei figli di container_mc
for(var i:int=0;i < container_mc.numChildren;i++)
usando container_mc.getChildAt(i), rintraccio un figlio di container_mc in base all' itreazione del ciclo (i) e co l' operatore is, chiedo a Flash di che tipo è l' oggetto trovato
if(container_mc.getChildAt(i) is MovieClip)
if(container_mc.getChildAt(i) is TextField)
if(container_mc.getChildAt(i) is SimpleButton)
if(container_mc.getChildAt(i) is Shape)
ad ogni condizione trovata, creo una variabile locale dello stesso tipo che la condizione if ha trovato in quel momento e gli assegno l' istanza
var clip:MovieClip=container_mc.getChildAt(i) as MovieClip;
var field:TextField=container_mc.getChildAt(i) as TextField;
var button:SimpleButton=container_mc.getChildAt(i) as SimpleButton;
var shape:Shape=container_mc.getChildAt(i) as Shape;
eseguo il trace chiedendo il nome dell' istanza trovata
trace('io sono una MovieClip e il mio nome è: '+clip.name);
trace('io sono una TextField e il mio nome è: '+field.name);
trace('io sono una SimpleButton e il mio nome è: '+button.name);
trace('io sono una Shape e il mio nome è: '+shape.name);
Alla prossima !