Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Gestione dei livelli con i metodi swapChildren e getChildAt

This is a discussion on Gestione dei livelli con i metodi swapChildren e getChildAt within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Salve a tutti ! Con questo tutorial di Flash CS3 vedremo come gestire i livelli delle MovieClip utilizzando Actionscript 3.0 . ...


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 links from elsewhere to this Post. Click to view. #1 (permalink)  
Old 04-12-07, 06:40
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Gestione dei livelli con i metodi swapChildren e getChildAt

Salve a tutti !


Con questo tutorial di Flash CS3 vedremo come gestire i livelli delle MovieClip utilizzando Actionscript 3.0 .

Avevo già accennato a come utilizzare il metodo swapChildern nel tutorial swapDepth è stato rimosso.

Questa volta utilizzo gli eventi del mouse per gestire i livelli di alcune MovieClip che ho sullo stage.

In sostanza, creo delle MovieClip tipo finestre e le rendo trascinabili.

Per fare ciò devo anche mettere al livello più alto la MovieClip che cliccherò in modo che sia interamente visibile e non sovrapposta da un altra MovieClip.

Ecco allora che intervengono i metodi swapChildren e getChildAt.


Creo un FLA che salvo con nome ' main.fla '.
Al suo interno creo una MovieClip in libreria di forma rettangolare tipo una finestra, gli assegno il nome mc_tab e come identificatore classe gli assegno Tab.
Non creo fisicamente la classe Tab in quanto non mi serve agire direttamente dal suo interno per cui la lascio creare a Flash.
Creo invece la Document Class di main.fla, un file AS che salvo con nome ' main.as ', implementata in questo modo:
Code:
package
{
	import flash.display.MovieClip;
	import flash.events.MouseEvent;
	import flash.geom.Rectangle;
	
	public class Main extends MovieClip
	{
		private var num_windows:int=10;
		
		private var tabs_array:Array;
		
		public function Main()
		{
			init();
			createWindows();
			positionWindows();
			addListeners();
		}
		
		private function init():void
		{
			stage.frameRate=31;
			
			tabs_array=new Array();
		}
		
		private function createWindows():void
		{
			for(var i:int=0;i < num_windows;i++)
			{
				var tab:Tab=new Tab();
				addChild(tab);
				tabs_array.push(tab);
			}
		}
		
		private function positionWindows():void
		{
			for(var i:int=0;i < tabs_array.length;i++)
			{
				tabs_array[i].x=20+20*i;
				tabs_array[i].y=50;
			}
		}
		
		private function addListeners():void
		{
			for(var i:int=0;i < tabs_array.length;i++)
			{
				tabs_array[i].addEventListener(MouseEvent.MOUSE_DOWN,setDown);
				tabs_array[i].addEventListener(MouseEvent.MOUSE_UP,setUp);
			}
		}
		
		private function setDown(evt:MouseEvent):void
		{
			var tab:MovieClip=evt.target as MovieClip;
			swapChildren(tab,getChildAt(tabs_array.length-1));
			var rect:Rectangle=new Rectangle(0,0,stage.stageWidth-evt.target.width,stage.stageHeight-evt.target.height);
			tab.startDrag(false,rect);
		}
		
		private function setUp(evt:MouseEvent):void
		{
			evt.target.stopDrag();
		}
	}
}
Ed ecco il risultato:






Analizziamo il codice

Proprietà

una variabile numerica che contiene il valore del numero di MovieClip che voglio utilizzare
private var num_windows:int=10;
un array in cui inserirò ogni MovieClip ( mc_tab con classe Tab ) che attaccherò allo stage
private var tabs_array:Array;

Funzione Costruttrice Main()
chiamo il metodo init
init();
chiamo il metodo createWindows che crea tante MovieClip per quanto è il valore della variabile num_windows
createWindows();
chiamo il metodo positionWindows che posiziona le MovieClip a mio piacere
positionWindows();
chiamo il metodo addListeners che aggiunge i listeners in ascolto degli eventi del mouse necessari ad ogni MovieClip
addListeners();

Metodi
init();
imposto una velocità di frame rate
stage.frameRate=31;
inizializzo l' array tabs_array
tabs_array=new Array();

createWindows();
creo un ciclo for ed istanzio tante mc_tab pari al valore della variabile num_windows, le aggiungo allo stage e le inserisco nell' array tabs_array per tenerne traccia
for(var i:int=0;i < num_windows;i++)
{
var tab:Tab=new Tab();
addChild(tab);
tabs_array.push(tab);
}

positionWindows();
con questo metodo posiziono tutte le MovieClip all' interno di tabs_array in posizione orizzontale distaccate di 10 pixels l' una dall' altra
for(var i:int=0;i < tabs_array.length;i++)
{
tabs_array[i].x=20+20*i;
tabs_array[i].y=50;
}

addListeners();
assegno un listener ad ogni MovieClip che all' evento MOUSE_DOWN sulla MovieClip chiamerà la funzione setDown e all' evento MOUSE_UP chiamerà invece la funzione setUp
for(var i:int=0;i < tabs_array.length;i++)
{
tabs_array[i].addEventListener(MouseEvent.MOUSE_DOWN,setDown);
tabs_array[i].addEventListener(MouseEvent.MOUSE_UP,setUp);
}

setDown();
creo una variabile locale di tipo MovieClip che chiamo clip e gli assegno il valore di evt.target che non è altro che la MovieClip che è stata selezionata col mouse
var tab:MovieClip=evt.target as MovieClip;
dico di scambiare i livelli di 2 MovieClip utilizzando il metodo swapChildren. Quali sono le 2 MovieClip ? Semplice, una è quella che è stata selezionata dal mouse ( quindi clip ) e l' altra è quella che si trova al livello pari al numero della lunghezza di tabs_array meno 1 e la recupero con getChildAt che vuole come parametro appunto un livello dal quale recuperare la MovieClip alla quale cambiare il livello.
swapChildren(tab,getChildAt(tabs_array.length-1));
creo un Rectangle da passare al metodo startDrag che mi delimita lo spazio di spostamento della MovieClip in fase di trascinamento
var rect:Rectangle=new Rectangle(0,0,stage.stageWidth-evt.target.width,stage.stageHeight-evt.target.height);
rendo trascinabile la MovieClip selezionata assegnandole il metodo startDrag
tab.startDrag(false,rect);

setUp();
fermo lo trascinamento della MovieClip selezionata
evt.target.stopDrag();

Alla prossima & stay tuned !
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
getChildAt() ulisse46 Actionscript 3.0 base 8 13-11-08 13:44
metodi set e get x sprite obj boxbuilder Actionscript 3.0 base 6 21-01-08 10:43
Domande sui metodi del game gallina Marco756 Actionscript 3.0 base 2 04-01-08 10:54
Incapsulamento e metodi Getter & Setter Flep Articoli e tutorials 15 14-11-07 13:58
XML 3 livelli loris.dassie Actionscript 3.0 avanzato 8 06-11-07 09:36


All times are GMT. The time now is 11:03.


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