Utilisation des boucles en ActionScript 3 (AS3)
Les boucles vont vous permettre d'éxécuter à plusieurs reprises, un bloc de code employant une série de valeurs ou de variables.
La boucle for
La boucle for permet de réitérer une ou plusieurs instructions utilisant une variable, pour une plage de valeurs définies.
Le traitement d'une boucle for nécessite 3 expressions :
- une variable qui est placée à une valeur initiale
- une condition qui détermine la limite de la plage de valeurs
- une expression qui change la valeur de la variable après chaque boucle
-
/* La boucle for permet de réitérer une ou plusieurs instructions utilisant une variable, pour une plage de valeurs définies. Le traitement d'une boucle for nécessite 3 expressions : - une variable qui est placée à une valeur initiale - une condition qui détermine la limite de la plage de valeurs - une expression qui change la valeur de la variable après chaque boucle */
-
for(var i:uint=0;i<10;i++)
-
{
-
trace("La valeur de i est "+i);
-
}
La boucle while
La boucle while permet d'éxécuter un bloc de code tant qu'une condition est vrai
-
// La boucle while permet d'éxécuter un bloc de code tant qu'une condition est vrai
-
var compteur:uint = 1;
-
while(compteur<8)
-
{
-
trace("compteur="+compteur);
-
// l'opérateur ++ permet d'incrémenter d'une valeur une variable numérique
-
compteur++;
-
}
La do while
La boucle do while permet elle aussi d'éxécuter un bloc de code tant qu'une condition est vrai mais par contre elle éxécute d'abord le bloc d'instructions puis examine la condition. Cela signifie donc que le bloc de code est éxécuté au moins 1 fois
-
/* La boucle do while permet elle aussi d'éxécuter un bloc de code tant qu'une condition est vrai mais par contre elle éxécute d'abord le bloc d'instructions puis examine la condition. Cela signifie donc que le bloc de code est éxécuté au moins 1 fois*/
-
var count:uint = 5;
-
do
-
{
-
trace("count="+count);
-
count++;
-
}
-
while(count<5);
;)
Je suis Antony Chauviré, développeur sur la Flash Platform.
Hello :)
Oui ... les boucles avec leurs grande souplesse et leurs "limites" :) Tu as peut être oublié le for..in et le for..each ? mais c'est peut être fait exprés pour un prochain article? :)
EKA+ )
Bonjour ! Je voulais juste te dire que ton blog est magnifique, en tout cas ça m'avance bien en regardant tes articles, mérci pour ce blog et continue comme ça !
Amicalement !
Bonsoir,
Vraiment très bien ton Blog : pour quelqu'un qui se met à l'AS3, c'est une source idéale.
Si je me réfère aux commentaires du dessus, apparemment, les visites ne sont pas très fréquentes ?
Bonjour Nodee,
Concernant les visiteurs du site, la moyenne est de 3500 visiteurs uniques par mois.
Les commentaires ont été fermés pendant de long mois à cause du spam d'où le commentaire précédent le tien datant de 2 ans.
Tannoy
Bonjour à tous,
Je suis nouveau sur le site et dois avouer ne pas trop savoir comment cela marche.. j'ai cherché un forum afin de pouvoir publier mon problème, mais je n'en ai pas trouvé :$
J'espère seulement que ce sera lu et ainsi... répondu ;)... sans non plus agresser personne si j'écris à un endroit que je ne devrait pas.
J'ai quelques bases en AS2 et AS3 cependant ça fait déjà un moment que je n'ai pas vraiment travaillé avec cela.
Comme je tente de refaire mon portfolio entièrement en flash interactif je n'ai pas trop le choix de mit remettre un peu.
Le problème que j'ai actuellement se trouve au niveau des boucles.
Ce que je souhaite c'est qu'une liste de propriétés se fassent automatiquement sur un ensemble de boutons qui se trouvent à l'intérieur d'un movieclip.
Je ne sais pas où se trouve mon erreur.. flash me dit "Impossible de créer la propriété buttonMode sur String".
Voici mon code si cela peut vous aider à voir plus clairement où est mon "bug".
var btnfoto;
var OmbreThumb:DropShadowFilter = new DropShadowFilter(3, 45, 0x000000, .6,10, 10);
for (var numfot:Number=1;numfot<=30;numfot++)
{
btnfoto="mc_barlateral.btn"+numfot;
trace(btnfoto);
btnfoto.buttonMode=true;
/*btnfoto.alpha=0.5;*/
/*btnfoto.addEventListener(MouseEvent.MOUSE_OUT,opacite50);*/
/*btnfoto.addEventListener(MouseEvent.MOUSE_OVER,opacite100);*/
/*btnfoto.filters = new Array(OmbreThumb);*/
/*function opacite100(evt:MouseEvent)
{*/
/*evt.target.filters = new Array(OmbreThumb);*/
/*evt.target.alpha=1;
evt.target.scaleX=1.1;
evt.target.scaleY=1.1;
evt.target.x-=4;
evt.target.y-=3;
}*/
/*function opacite50(evt:MouseEvent)
{
evt.target.alpha=0.5;
evt.target.scaleX=1;
evt.target.scaleY=1;
evt.target.x+=4;
evt.target.y+=3;
}*/
}
J'ai tout mit ce qu'y vient après le buttonmode en commentaire car déjà rendu là l'erreur se produit.
Cela fait la même chose quand je tente d'essayer ma boucle avec n'importe quelle des autres propriétés que je tente de d'affecter à mes boutons via ma variable.
J'ai tenter plusieurs chose, dont inscrire String à plusieurs endroits, mais rien ne marche.
Je vous demande votre aide,
Merci,
Louis
Bonjour Louis,
La variable btnfoto contient une chaîne de caractères lorsque tu lui affectes sa valeur:
btnfoto="mc_barlateral.btn"+numfot;
Or je suppose que tu voudrais que cette variable stocke une référence à ton bouton donc dans ce cas, tu dois modifier ta valorisation par:
btnfoto=mc_barlateral["btn"+numfot];
D'autre part, si ta variable btnfoto doit stocker des références à des boutons créés dans la bibliothèque, je te conseille de la typer avec le type SimpleButton:
var btnfoto:SimpleButton;
;-)
Petite actualisation sur les visiteurs du site à l'heure d'aujourd'hui:
6011 visiteurs uniques absolus par mois
11 070 visites par mois
;-)
Merci beaucoup de ton aide Tannoy, je regarde cela demain au courant de la journée et je te confirme si ça marche ;)... je me croise vraiment les doigts.
Mais je ne comprends pas vraiment que vient changer les [] dans le code :$... la concaténation comme je l'ai faite n'est pas valable quand il s'agit d'appliquer un chemin d'un bouton jusqu'à l'intérieur d'un clip ? Mes boutons se trouvent directement sur ma scène je vais quand même tenter de voir ce que je peux faire avec ce que tu m'as envoyé. Encore Merci.
ÇA MARCHE !!!... je ne comprends pas vraiment ce que sont venus changer les crochets, mais bon... l'important c'est que ça fonctionne. J'ai même rajouté mes liens ainsi que mes conteneurs dans la boucles et tout marche nickel. J'ai deux petites et très brèves autres questions si jamais tu me le permet. Je veux en profiter (sans en abuser) ;).. Y a-t'il un moyen de faire en sorte que mon code aille chercher mes photos une après l'autre dans mon dossier sans que j'aille besoin de toutes les renommer 1,2,3,4...etc. afin qu'elles soient directement liées avec mes boutons de façon automatique par la boucle ? La deuxième petite question est que j'ai un autre bug au niveau de l'interaction avec le movieclip à partir d'un bouton externe. Je me trouve vraiment niait de demander ton aide car le code ne contient que trois lignes et je suis sûre que c'est vraiment simplement une petite chose qu'y me manque. Bref j'ai tenté 200 trucs différent et rien ne marche. Alors voici le petit code :
btn_defil_dr.addEventListener(MouseEvent.MOUSE_UP, frame_2);
function frame_2(go:MouseEvent):void
{
this.mc_barlateral.gotoAndPlay(2);
}
Je veux simplement qu'il fasse jouer le movieclip comme il se doit :P... merci encore de ta grande aide
Est-ce que c'est que je dois poster cette question sous une autre rubrique ? Si c'est le cas simplement que me le dire svp car je suis un peu perdu sur le site.. merci.
Bonjour Jasred36,
Les crochets vont te permettre d'évaluer la chaîne que tu as créé par concaténation pour la transformer en chemin d'accès.
Concernant tes autres questions, je te propose de les poser sur le forum Mediabox où tu pourras notamment joindre ton fichier afin d'obtenir tes réponses.
;-)
Merci Tannoy ;)
coucou,
J'essai de faire un puzzle, j'ai 10 pieces et donc je voudrais récupérer les position x et y
de chaque pièces avant de les mélanger
le nom des pieces est p1, p2 ... p 10
j'ai donc essayé
for(var i:uint=1;i<11;i++)
{
var xpiece+i = p+i.x;
var ypiece+i = p+i.y;
}
mais non :-(( quelqu'un saurait comment faire ?
Salut narpa,
il faut remplacer p+i.x par p[i].x afin de demander au compilateur d'évaluer le nom d'objet dynamique.
;-)
aie je n'y arrive pas :
-----------------------------------------
for(var i:uint=1;i<11;i++)
{
trace (p[i].x)
trace (p[i].y)
}
------------------------------------------
erreur " Accès à la propriété non définie p."