Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Programmation > ActionScript / Flash / Flex > Introduction à l'ActionScript > Les bases de l'actionscript > Les Boucles > Lecture du tutoriel

Les Boucles

Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Avatar
Auteur : SuprazZz
Visualisations : 18 231

Plus d'informations Plus d'informations
Nous avons vu les conditions et leur importance, nous nous intéressons maintenant à l'autre point commun à tous les langages de programmation, j'ai nommé : les boucles !
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Qu'est-ce qu'une boucle

Comme vous le savez, Flash lit le code dans l'ordre : de haut en bas.
Une fois arrivé tout en bas : il s'arrête. :)

Image utilisateur

Eh bien avec une boucle, vous allez pouvoir demander à ce qu'une partie du code, un bloc d'instructions, soit répété un certain nombre de fois.
Et pour illustrer mes propos, je vais me permettre de ressortir sans autorisation, alors ne le répétez pas, une image d'un autre tuto du site que vous reconnaîtrez. :p

Le système de boucle de Flash est exactement le même que celui du C ou du Php, ceux qui savent déjà comment utiliser les boucles peuvent donc sauter ce chapitre.

Cela dit, les nouveaux en Flash font souvent une erreur importante. Ils pensent que en faisant une boucle qui déplace un clip sur la scène, l'utilisateur verra ce clip se déplacer. C'est faux ! Tant que Flash n'a pas fini d'exécuter tout le code qu'il voit, il n'affichera rien !

La boucle ne s'exécute pas DANS le temps mais INSTANTANEMENT. Mais attention, si on demande à Flash de répéter une boucle plusieurs centaines de fois, ça peut durer longtemps, mais cela ne fera que figer l'animation, l'utilisateur ne verra rien.

Boucle while

Nous allons déjà regarder la boucle simple existante : la boucle while.

Tout comme if qu'on a vu précédemment, while va exécuter du code si une condition booléenne est remplie (retournez vite dans le chapitre précédent si vous avez pas compris les derniers mots :D ).

En français, voilà ce que donnerait une boucle while :

Code : Autre
1
2
3
TANT QUE {CONDITION est VRAIE}

ALORS ...


Et en Flash :

Code : Autre
1
2
3
while (condition) {
// actions à effectuer
}


Ainsi, tant que la condition est remplie, Flash réexécutera le code à l'intérieur de la boucle.

Et si la condition ne change pas et reste toujours égale à true ?

Là c'est le bordel. :D C'est ce qu'on nomme une boucle infinie. L'animation Flash restera figée un bon moment, mais au bout de quelques dizaines de (longues) secondes, Flash vous demandera si vous souhaitez continuer l'exécution du code, où si vous préférez arrêter tout. C'est un mécanisme de protection pour les utilisateurs.

Amusons-nous un peu. :p

Code : Autre
1
2
3
4
5
6
var monnombre:Number = 10;

while(monnombre > 0) { // Tant que monnombre est strictement plus grand que 0
        trace(monnombre); // On affiche la valeur de la variable
        monnombre--; // On décremente la variable (on soustrait 1 )
}


Vous pouvez observer dans la fenêtre de sortie que l'effet est immédiat. Vous pouvez voir tous les chiffres de 10 à 1.

Maintenant, pour le plaisir, un exemple de ce qu'il ne faut pas faire :

Code : Autre
1
2
3
while(true) {
        trace("boucle infinie");
}


Pour tester, vous pouvez exécuter ce code, vous pourrez ainsi voir la fenêtre de Flash demandant s'il est raisonnable de continuer d'exécuter le script. :)

C'est tout ce qu'il y a à savoir sur les boucles while.

Boucle for

Voilà une boucle plus évoluée que while, il s'agit de for.
En fait, for est une boucle while condensée, tout comme les ternaires étaient des if condensés.

En français :
Code : Autre
1
2
3
4
5
Déclaration de ma variable

Condition sur la variable pour que la boucle se fasse

Modification de ma variable pour que la boucle ne se fasse pas à l'infini


Tout à l'heure on a écrit :

Code : Autre
1
2
3
4
5
6
var monnombre:Number = 10;

while(monnombre > 0) { // Tant que monnombre est strictement plus grand que 0
        trace(monnombre); // On affiche la valeur de la variable
        monnombre--; // On décrémente la variable (on soustrait 1)
}


Et maintenant la même chose avec for :

Code : Autre
1
2
3
for (var monnombre:Number = 10; monnombre>0; monnombre--) {
        trace(monnombre);
}


Vous retrouvez tous les éléments, mais dans le désordre. :D
On initialise la variable, on écrit la condition nécessaire à l'exécution de la boucle, et dans cet exemple on décrémente la variable. On sépare tout ça par des points virgules ;

Pour les matheux, vous verrez une analogie avec ce qu'on appelle les démonstrations par récurrence.

Maintenant, voyons comment faire si on voulait que la fenêtre de sortie ne nous affiche pas 10 jusqu'à 1 mais 1 jusqu'à 10. :D
Secret (cliquez pour afficher)
Code : Autre
1
2
3
for (var monnombre:Number = 1; monnombre<=10; monnombre++) {
        trace(monnombre);
}


Comme vous avez remarqué, dans ce cas on déclare la variable égale à 1, pas zéro. Sinon, la première valeur affichée serait 0, car l'incrémentation ne s'effectuera qu'après la première lecture du bloc contenu dans la boucle. :) Il ne faut pas oublier de préciser la condition inverse, c'est-à-dire tant que monnombre strictement plus petit que 10 et changer la décrémentation en incrémentation.

Petits exercices de style

Je trouvais ça triste d'écrire un chapitre sur les boucles sans s'amuser un peu avec. Et pour cela je vous ai préparé un petit exercice sympathique et qui se révélera utile :

Vous souhaitez que la fenêtre de sortie vous affiche une fois "No problemo", une fois "Aïe caramba" et cela de façon alternée une vingtaine de fois :
Code : Autre
1
2
3
4
5
6
7
8
9
No Problemo

Aïe Caramba

No Problemo

Aïe Caramba

...


Comment faire ? :D
Avant de regarder les solutions, cherchez un peu. :p

Il existe des dizaines de façons de répondre à cet exercice.
Moi j'ai décidé d'utiliser une boucle for dans les deux solutions que je vous propose.

La première solution



C'est la plus logique et la plus facile à comprendre.

Code : Autre
1
2
3
4
5
var machaine:String = "No Problemo";
for (var monnombre:Number = 20; monnombre>0; monnombre--) {
machaine = (machaine=="No Problemo") ? "Aïe Caramba" : "No Problemo";
trace(machaine);
}


On déclare la variable machaine et on lui affecte la valeur "No Problemo".
Ensuite dans une boucle for qui va s'exécuter 20 fois, je place une condition avec structure ternaire histoire de gagner de la place :) (et de vous faire réviser la précédente leçon ^^ ).
Code : Autre
1
2
3
Si machaine vaut "No Problemo", alors on lui affecte la valeur "Aïe Caramba"

Si machaine ne vaut pas "No Problemo", alors on lui affecte la valeur "No Problemo"


Et puisqu'il n'y a que deux possibilités de valeur, ça fonctionne très bien. :D

La seconde solution



Plus "mathématique", mais aussi plus courte, voici la seconde solution :

Code : Autre
1
2
3
4
5
var machaine:String;
for (var monnombre:Number = 20; monnombre>0; monnombre--) {
        machaine = (monnombre%2 == 1) ? "No Problemo" : "Aïe Caramba";
        trace(machaine);
}


On utilise ici les modulos.
On déclare une chaîne de caractères vide : machaine
Et dans une boucle répétée 20 fois, on va utiliser les modulos.

Rappel : le modulo est un opérateur qui retourne le reste de la division euclidienne de deux nombres. Il est représenté par le signe %
Par exemple : 10%4 = 2 car quand vous divisez 10 par 4 il reste 2 !


Il faut savoir que la division euclidienne de n'importe quel nombre entier (sans virgule si vous préférez) par 2 ne donnera que deux restes possibles : 0 ou 1.
Code : Autre
1
2
3
SI reste de la division de monnombre par 2 VAUT 1 ALORS machaine DEVIENT "No Problemo"

SI reste de la division de monnombre par 2 NE VAUT PAS 1 ALORS machaine DEVIENT "Aïe Caramba"


J'ai décidé pour que le code soit plus clair de passer encore une fois par la variable machaine.
Cela dit, elle n'est pas obligatoire avec la solution des modulos. On aurait pu mettre directement la condition dans la fonction trace et on aurait gagné 3 lignes. ;)

Code : Autre
1
2
3
for (var monnombre:Number = 20; monnombre>0; monnombre--) {
        trace((monnombre%2 == 1) ? "No Problemo" : "Aïe Caramba");
}


J'espère que vous avez trouvé ce petit exercice sympathique. Sachez que pouvoir de façon simple échanger deux valeurs dans une variable se révèle souvent très utile, par exemple pour colorier de couleurs différentes une ligne sur deux d'un tableau. :D

Q.C.M.

On a un clip monclip sur scène

Code : Actionscript
1
2
3
4
monclip._x = 0;
for (var monnombre:Number = 21; monnombre>0; monnombre--) {
        monclip._x ++;
}


Quelle sera sa position horizontale (axe des abscisses) en pixel après l'exécution de code ?
On a un clip monclip complétement opaque sur scène.
On exécute ce code :
Code : Autre
1
2
3
while(monclip._alpha >= 0) {    
        monclip._alpha --;
}


Quelle sera son opacité ?
Comme précédement, un clip monclip totalement opaque sur scène :

Code : Autre
1
2
3
while(false) {  
        monclip._alpha --;
}


Quelle sera sa transparence ?
On a vu que ce code affichait une fois sur deux "Aïe Caramba" et "No Problemo" :

Code : Autre
1
2
3
for (var monnombre:Number = 21; monnombre>0; monnombre--) {
        trace((monnombre%2 == 1) ? "No Problemo" : "Aïe Caramba");
}


Et celui-là (le modulo est changé) ?

Code : Autre
1
2
3
for (var monnombre:Number = 21; monnombre>0; monnombre--) {
        trace((monnombre%3 == 1) ? "No Problemo" : "Aïe Caramba");
}

Statistiques de réponses au QCM


Ce chapitre fut court mais très enrichissant. Ne l'oubliez donc pas, les boucles reviendront souvent dans notre code. :p
Chapitre précédent Sommaire Chapitre suivant
Retour en haut Retour en haut


Créé : le 30/11/2005 à 19:39:43
Modifié : le 22/08/2008 à 15:52:50
Avancement : 0%
Licence : Copie non autorisée

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 93 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0682s (0.0535s)