Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Posizionare delle shapes utilizzando un ciclo

This is a discussion on Posizionare delle shapes utilizzando un ciclo within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Questo articolo potrebbe risultare ' insipido ' a qualcuno di voi ma credo che spesso ne abbiamo avuto a che fare. Spesso ...


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 20-09-07, 17:20
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Posizionare delle shapes utilizzando un ciclo

Questo articolo potrebbe risultare ' insipido ' a qualcuno di voi ma credo che spesso ne abbiamo avuto a che fare.
Spesso ci capita di dover posizionare molte MovieClip ( oppure Sprites o Shapes, campi di testo... ) in modo ordinato. Soprattutto quando lavoriamo con dei files XML e quindi dei dati da visualizare, ci piacerebbe metterli in un ordine di visualizzazione ordinato, tutti uno in fila all' altro e che vadano anche a capo.
Un altro esempio potrebbe essere quello di aver bisogno di posizionare delle thumbnails per una galleria immagini tramite attachMovie da libreria e le vogliamo tutte in fila, belle precise.
Per farlo in un modo corretto ( per la mia umile conoscenza di Actionscript ) ci serve utilizzare un ciclo for.

Vediamo come...

Per fare questo esempio, disegnerò delle Shapes a runtime ma, come già detto, potrebbe essere fatto attaccando delle MovieClip da libreria o caricando delle immagini dall' esterno, ecc ecc.

Creo un FLA che salvo con nome ' main.fla ' che lascio vuoto, tranne che per asssegnargli 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.Shape;
	
	public class Main extends MovieClip
	{
		private const num_shapes:int=50;
		private const side:int=50;
		private const distance:int=10;
		private const per_lines:int=9;
		
		public function Main()
		{
			createShapes();
		}
		
		private function createShapes():void
		{
			var X:int=0;
			var Y:int=0;
			for(var i:int=0;i < num_shapes;i++)
			{
				var shape:Shape=new Shape();
				shape.graphics.beginFill(0x0066FF,1);
				if(!(i%per_lines)&&i!=0)
				{
					X=0;
					Y+=side+distance;
				}
				shape.graphics.drawRect(distance+side*X+distance*X,distance+Y,side,side);
				addChild(shape);
				X++;
			}
		}
	}
}
Per ottenere questo risultato:










Analizziamo il codice

Proprietà
quattro costanti ( quindi non più modificabili, mantengono sempre il valore impostato in fase di dichiarazione )
la prima contiene il numero delle Shape che ho, un esempio classico potrebbe essere la lunghezza di un Array che contiene svariate Shape ( my_array.length)
private const num_shapes:int=50;
la seconda contiene in questo caso il lato del quadrato che andrò a disegnare
private const side:int=50;
la terza contiene il valore della distanza che voglio inserire tra una e l' altra
private const distance:int=10;
l' ultima contiene il valore di quante Shape voglio per ogni riga
private const per_lines:int=9;

Metodi
createShapes();
creo 2 variabili locali alla funzione ( prima del ciclo ! ) con valore zero
var X:int=0;
var Y:int=0;
apro il ciclo utilizzando come valore massimo delle iterazioni la variabile num_shapes
for(var i:int=0;i < num_shapes;i++)
{
creo una Shape
var shape:Shape=new Shape();
inizializzo le sue grafiche
shape.graphics.beginFill(0x0066FF,1);
applico una logica condizionale che sarà fondamentale per disporre le Shape, questo perchè, ad esempio abbiamo detto ( guardando la costante per_line ) che vogliamo 9 Shape per ogni riga, ciò significa che dobbiamo azzerare la coordinata x per ogni multiplo di 9 e per farlo uso la sintassi !(i%per_line). In più dobbiamo incremetare la coordinata y di un valore pari alle dimensione dell' height della Shape più la distanza ( costante distance ). Tutto questo però solo se la ' i ' è diversa da zero, in quanto alla prima iterazione ( con i=0 ) ci stanno bene le coordinate che vengono create, per cui aggiungiamo una seconda condizione: i!=0
if(!(i%per_lines)&&i!=0)
{
riporto il valore della variabile X a zero
X=0;
incremento il valore della variabile Y dell' height della Shape ( quindi pari al valore della costante side ) + la distanza
Y+=side+distance;
}
disegno il quadrato della Shape passandogli:
come x, la distanza + il lato ( costante side ) moltiplicato per la variabile X ( quella famosa che viene azzerata ogni volta che l'iterazione del ciclo è un numero multiplo di 9 ( costane per_line ). Però così avrei le Shape una attaccata all' altra, quindi devo aggiugere la distanza e quindi + distance sempre moltiplicato per X
come y, gli passo la distanza moltiplicata per Y ( lavariabile che viene incrementata ognivolta che l' iterazione del ciclo è un numero multiplo di 9 )
come width e come height gli passo il valore della costante side
shape.graphics.drawRect(distance+side*X+distance*X ,distance+Y,side,side);
aggiungo la shape al DisplayObject ( o stage in questo caso ) altrimenti non sarebbe visibile
addChild(shape);
incremento la variabile X di una unità ( e quando l' iterazione del ciclo sarà un multiplo di 9 verrà riportata a zero )
X++;
}

NB: consiglio di fare delle prove, per capire meglio la logica utilizzata in questo ciclo, cambiando i valori delle costanti.

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

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
Flash CS3 Come posizionare la Gallery Leflect Donovant Flash CS3 generale 12 22-10-08 15:39
Creare un componente Flex utilizzando Flash CS3 Flep FLEX builder 3 3 08-10-08 15:50
Actionscript 3 AddChild adding Class but not internal shapes chiru advanced Actionscript 3.0 2 10-07-08 18:42
Actionscript 3 addEventListener e ciclo for... jhoncybpr Actionscript 3.0 base 1 02-07-08 15:19
Positioning shapes using a loop Flep Tutorials 3 10-11-07 09:14


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


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