Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Tutorial 3 - i cicli

This is a discussion on Tutorial 3 - i cicli within the Actioscript 3.0 base - tutorials forums, part of the Articoli e tutorials category; Ciao a tutti :) Adesso che abbiamo visto cosa sono gli Array e come si usano , proseguo con i tutorials di ...


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

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  2 links from elsewhere to this Post. Click to view. #1 (permalink)  
Old 15-10-07, 06:40
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Tutorial 3 - i cicli

Ciao a tutti :)
Adesso che abbiamo visto cosa sono gli Array e come si usano, proseguo con i tutorials di Actionscript 3.0 base
In questo articolo vedremo cosa sono i cicli, a cosa servono, quanti tipi sono e come usarli.
Inoltre i cicli ci permettono di navigare all' interno degli Array risalendo ad ogni loro elemento utilizzando appunto la variabile di controllo del ciclo come indice di un Array.

I cicli sono blocchi di codice che vengono eseguiti ripetutamente fino a quando una certa condizione ( chiamata condizione di ciclo ) ha valore true, cioè è vera.
Acionscript 3.0 mette a disposizione 5 tipi di cicli...

for ( solitamente il più usato )

while

do - while

for - each - in

for - in

Vediamo come usarli...

Ciclo for


Questo ciclo è di solito il più utilizzato e lasciatemi dire anche il più semplice da apprendere per chi è alle prime basi.
Un ciclo for è una struttura che permette la ripetizioni di parti di codice da 0 a più volte ( anche infinito se necessario ) dichiarando il numero di iterazioni ( numero di volte che il codice verrà eseguito ).
Per creare un ciclo for, bisogna stare attenti a 5 regole fondamentali.

  1. Naturalmente dichiarare la parola for, in modo che Flash capisca che stiamo inizializzando un ciclo

  2. Dichiarare una variabile di controllo

  3. Dichiarare una condizione di ciclo

  4. Dichiarare una espressione di incremento

  5. Dichiarare il blocco di istruzioni


Quindi, con Actionscript 3.0, dichiariamo un ciclo in questo modo:
Code:
for(var i:int=0;i<10;i++)
{
	trace(i);
}
ottenendo il seguente output

Quote:
0
1
2
3
4
5
6
7
8
9
for , dichiaro il ciclo
var i:int=0; dichiaro una variabile di controllo ( in questo caso ha valore iniziale zero )
i<10; questa è la condizione di ciclo, cioè fino a che il valore della variabile i è minore di 10, Flash esegue il codice
i++; questa è l' espressione di incremento, ad ogni iterazione del ciclo viene incrementata la variabile di controllo
trace(i); è il blocco di istruzioni, il codice che Flash esegue ad ogni iterazione.

In sostanza avviene questo:
  • Flash vede che è un ciclo dall' operatore for
  • Controlla la condizione di ciclo ( se i è minore di 10 ) e se è vera allora esegue il codice tra le graffe
  • Esegue il codice tra le graffe ( il blocco di istruzioni )
  • Dato cha sa che è un ciclo, non continuerà ad eseguire il codice che eventualmente sarà dopo il ciclo, ma andrà ad incrementare la i ( i++ )
  • quando la condizione di ciclo sarà falsa, e cioè che i sarà uguale o maggiore a 10, allora Flash uscirà dal ciclo ed eseguirà il codice seguente al ciclo
Code:
for(var i:int=0;i<10;i++)
{
	trace(i);
}
trace('fatto');
output:

Quote:
0
1
2
3
4
5
6
7
8
9
fatto
Dato che ho già presentato gli Array di Actionscript 3.0, vediamo come navigarli ed accedere ai loro elementi utilizzando un ciclo for.
Code:
var nomi:Array=new Array('filippo','andrea','giovanni','pietro','giacomo','luca','paolo');
for(var n:int=0;n < nomi.length;n++)
{
	trace(nomi[n]);
}
Ho creato un array
var nomi:Array=new Array('filippo','andrea','giovanni','pietro','giac omo','luca','paolo');
creo un ciclo for con condizione di ciclo il valore massimo della lunghezza dell' array ( usando la proprietà length della classe Array, che abbiamo già visto nel tutorial 2 sugli Array )
for(var n:int=0;n < nomi.length;n++)
e poi utilizzo la variabile di controllo ( in questo caso n ) per accedere ad ogni elemento dell' array tramite i suoi indici
trace(nomi[n]);

ottenendo il seguente output

Quote:
filippo
andrea
giovanni
pietro
giacomo
luca
paolo

Ciclo while


Strutturalmente, un ciclo while assomiglia molto ad una logica condizionale ( if ) che vedremo più avanti.
Anche questo ciclo permette la ripetizioni di parti di codice da 0 a più volte dichiarando il numero di iterazioni.
A differenza del ciclo for, il ciclo while viene dichiarato in questo modo:

variabile di controllo
while(condizione di ciclo)
{
blocco di istruzioni
espressione di incremeto
}

quindi
Code:
var j:int=0;
while(j<10)
{
	trace(j);
	j++;
}
trace('fatto');
da il seguente output

Quote:
0
1
2
3
4
5
6
7
8
9
fatto
Come si nota, il risultato è identico al ciclo for, il tipo di struttura e la logica implementata nella nostra applicazione ci indicheranno quale tipo di ciclo utilizzare.
Inoltre è altrettanto importante notare che l' azione trace('fatto'); non viene eseguita fino a quando la condizione di ciclo risulta falsa.

Ciclo do while


Questo ciclo si potrebbe defiire come la versione invertita del ciclo while. Infatti la sua struttura è la seguente:

variabile di controllo
do
{
blocco di istruzioni
espressione di incremeto
}
while(condizione di ciclo);

quindi
Code:
var k:int=0;
do
{
	trace(k);
	k++
}
while(k<10);
trace('fatto');
con il seguente output

Quote:
0
1
2
3
4
5
6
7
8
9
fatto
Anche in questo caso vediamo che l' output non cambia, quindi il fine è lo stesso del ciclo for e del ciclo while. Saranno appunto le condizioni della struttura dell' applicazione che stiamo sviluppando a portarci ad usare il ciclo più adeguato ( anche se ripeto, nel 90% dei casi il ciclo for è sempre quello utilizzato ).

Ciclo for each in


Questo ciclo è fondamentale per accedere alle proprietà dinamiche di un oggetto oppure agli elementi di un Array tramite i suoi indici.
La sua struttura è la seguente:

for each(variabileDiControllo in Oggetto)
{
blocco di istruzioni
}

Quindi, supponiamo di avere un oggetto con diverse proprietà:
Code:
var oggetto:Object=new Object();
oggetto.nome='filippo';
oggetto.cognome='lughi';
oggetto.sesso='maschile';
oggetto.paese='cesenatico';
con un ciclo for each in possiamo risalire ogni proprietà di oggetto in questo modo
Code:
for each(var p in oggetto)
{
	trace(p);
}
ottenendo il seguente output

Quote:
filippo
lughi
maschile
cesenatico
Adobe non garantisce l' ordine di output tranne nei casi in cui lavoriamo con le classi XML e XMLList.
Infatti se aggiungo una proprietà a oggetto di tipo numerico
Code:
var oggetto:Object=new Object();
oggetto.nome='filippo';
oggetto.cognome='lughi';
oggetto.eta=35;
oggetto.sesso='maschile';
oggetto.paese='cesenatico';
ecco che l' output che ottengo non rispetta l' ordine

Quote:
filippo
35
lughi
maschile
cesenatico
Il seguente codice invece, utilizza il ciclo for each in per accedere agli elementi di Array:
Code:
var nomi:Array=new Array('filippo','andrea','giovanni','pietro','giacomo','luca','paolo');
for each(var s in nomi)
{
	trace(s);
}
ottenendo questo output

Quote:
filippo
andrea
giovanni
pietro
giacomo
luca
paolo

Ciclo for in


Questo ciclo ha la stessa struttura del ciclo for each in, l' unica sostanziale differenza è che il ciclo for each in itera tra i valori delle variabili mentre il ciclo for in itera tra i nomi delle variabili.
Vediamo un esempio sullo stesso Object dell' esempio
Code:
var oggetto:Object=new Object();
oggetto.nome='filippo';
oggetto.cognome='lughi';
oggetto.sesso='maschile';
oggetto.paese='cesenatico';
for (var p in oggetto)
{
	trace(p);
}
ottengo il seguente output

Quote:
nome
cognome
sesso
paese
Vorrei ricordare a chi è alle prime basi di Actionscript di fare numerosi esercizi e raggiugere una buona padronanza dei cicli.

Files:
Attached Files
File Type: zip tutorial_3_cicli.zip (6.9 KB, 105 views)

__________________

 


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 !

Last edited by Flep; 05-06-08 at 19:07..
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #2 (permalink)  
Old 12-03-08, 19:17
Junior Member
 
Join Date: Mar 2008
Posts: 4
Rep Power: 0
grandeorco is on a distinguished road
Riferimento: Tutorial 3 - i cicli

var nomi:Array=new Array('filippo','andrea','giovanni','pietro','giac omo','luca','paolo');
for each(var s in nomi2)
{
trace(s);
}


Perche è nomi2 e non nomi?
Cosa mi sfugge?
__________________
http://www.abibex.com il mio sito
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #3 (permalink)  
Old 13-03-08, 07:04
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: Tutorial 3 - i cicli

Era un errore

Ho corretto e grazie dell' avviso
__________________

 


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

  #4 (permalink)  
Old 13-03-08, 11:08
Junior Member
 
Join Date: Mar 2008
Posts: 1
Rep Power: 0
nexo is on a distinguished road
Re: Tutorial 3 - i cicli

  • Flash vede che è un ciclo dall' operatore for
  • Esegue subito il codice tra le graffe ( il blocco di istruzioni )
  • Dato cha sa che è un ciclo, non continuerà ad eseguire il codice che eventualmente sarà dopo il ciclo, ma andrà ad incrementare la i ( i++ )
  • Controlla la condizione di ciclo ( se i è minore di 10 ) e se è vera allora esegue ancora il codice tra le graffe
  • quando la condizione di ciclo sarà falsa, e cioè che i sarà uguale o maggiore a 10, allora Flash uscirà dal ciclo ed eseguirà il codice seguente al ciclo
Sei certo sia corretto?

Non dovrebbe essere :
  • Flash vede che è un ciclo dall' operatore for
  • Controlla la condizione di ciclo ( se i è minore di 10 ) e se è vera allora esegue il codice tra le graffe
  • Esegue il codice tra le graffe ( il blocco di istruzioni )
  • Dato cha sa che è un ciclo, non continuerà ad eseguire il codice che eventualmente sarà dopo il ciclo, ma andrà ad incrementare la i ( i++ )
  • quando la condizione di ciclo sarà falsa, e cioè che i sarà uguale o maggiore a 10, allora Flash uscirà dal ciclo ed eseguirà il codice seguente al ciclo
Grazie mille per tutto l'aiuto che ci dai e per l'impegno che costantemente metti a disposizione degli altri!


Saluti

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

  #5 (permalink)  
Old 15-03-08, 05:32
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: Tutorial 3 - i cicli

Quote:
Originally Posted by nexo View Post
  • Flash vede che è un ciclo dall' operatore for
  • Esegue subito il codice tra le graffe ( il blocco di istruzioni )
  • Dato cha sa che è un ciclo, non continuerà ad eseguire il codice che eventualmente sarà dopo il ciclo, ma andrà ad incrementare la i ( i++ )
  • Controlla la condizione di ciclo ( se i è minore di 10 ) e se è vera allora esegue ancora il codice tra le graffe
  • quando la condizione di ciclo sarà falsa, e cioè che i sarà uguale o maggiore a 10, allora Flash uscirà dal ciclo ed eseguirà il codice seguente al ciclo
Sei certo sia corretto?

Non dovrebbe essere :
  • Flash vede che è un ciclo dall' operatore for
  • Controlla la condizione di ciclo ( se i è minore di 10 ) e se è vera allora esegue il codice tra le graffe
  • Esegue il codice tra le graffe ( il blocco di istruzioni )
  • Dato cha sa che è un ciclo, non continuerà ad eseguire il codice che eventualmente sarà dopo il ciclo, ma andrà ad incrementare la i ( i++ )
  • quando la condizione di ciclo sarà falsa, e cioè che i sarà uguale o maggiore a 10, allora Flash uscirà dal ciclo ed eseguirà il codice seguente al ciclo
Grazie mille per tutto l'aiuto che ci dai e per l'impegno che costantemente metti a disposizione degli altri!


Saluti

Nexo
Sì, hai ragione
Chiedo scusa.

Ho corretto.
__________________

 


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

Flash Multi Gallery
  #6 (permalink)  
Old 20-03-08, 22:02
Junior Member
 
Join Date: Mar 2008
Posts: 11
Rep Power: 0
carnifexino is on a distinguished road
Riferimento: Tutorial 3 - i cicli

Ciao, complimenti per il forum e grazie delle guide.
Mi sembra che nell'esempio del ciclo for in manchi un pezzo di codice, dovrebbe esserci:

Code:
for (var p in oggetto)
{
    trace (p);
}
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #7 (permalink)  
Old 20-03-08, 22:08
Junior Member
 
Join Date: Mar 2008
Posts: 11
Rep Power: 0
carnifexino is on a distinguished road
Riferimento: Tutorial 3 - i cicli

Anche l'output è sbagliato, dovrebbe essere:
Quote:
nome
cognome
sesso
paese
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #8 (permalink)  
Old 21-03-08, 06:53
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: Tutorial 3 - i cicli

Sì hai ragione ho corretto.
Scusate le distrazioni... ma dov' ero con la testa quando ho scrito quel ciclo...
__________________

 


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

  #9 (permalink)  
Old 03-04-08, 17:34
Junior Member
 
Join Date: Mar 2008
Posts: 11
Rep Power: 0
carnifexino is on a distinguished road
Riferimento: Tutorial 3 - i cicli

Ciao, sempre io, ancora alle prese coi cicli ... ho creato un ciclo che disegna 10 volte un quadrato sullo stage:

Code:
var quadr:MovieClip = new MovieClip();

for (var i:int=0; i<10; i++)
{
quadr.name = 'quadr';
quadr.graphics.lineStyle(1);
quadr.graphics.drawRect(25 + 50 * i, 25 ,  50,  50);
addChild (quadr);
}
Ora vorrei provare a disegnare una 'griglia' di 10 quadrati x 10 sempre utilizzando i cicli (o altri sistemi perchè no?)... suggerimenti?
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #10 (permalink)  
Old 05-04-08, 06:15
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: Tutorial 3 - i cicli

Ciao

Ti ho fatto un esempio:
Code:
var colonne:int=5
var lato:int=50;
var spazio_sinistra:int=20;

for (var i:int=0; i<10; i++)
{
	var quadr:MovieClip = new MovieClip();
	quadr.name = 'quadr';
	quadr.graphics.lineStyle(1);
	quadr.graphics.drawRect(0, 0 , lato, lato);
	quadr.x = spazio_sinistra + ( i % colonne ) * lato;
	quadr.y = spazio_sinistra + Math.floor( i / colonne ) * lato;
	addChild (quadr);
}
__________________

 


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
Tutorial 4 - le funzioni Flep Actioscript 3.0 base - tutorials 2 11-11-08 11:18
Tutorial 7 - the packages Flep Object Oriented Programming - tutorials 3 13-11-07 02:42
Tutorial 1 the variables Flep Actionscript for beginners - tutorials 0 01-11-07 06:47
Tutorial 8 the constants Flep Object Oriented Programming - tutorials 0 30-10-07 06:47
gestire azioni di clip con cicli tem Actionscript 3.0 avanzato 16 09-08-07 01:19


All times are GMT. The time now is 21:25.


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