Boucle for

Signaler
Messages postés
183
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
23 avril 2010
-
Messages postés
183
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
23 avril 2010
-
hello tous,
j'ai un problème tout con je pense, mais je débute....

j'ai un clip qui se déplace avec un effet de ralentissement quand on clique dessus. Jusque là pas de problèmes ça fonctionne, mais en fait j'aimerais qu'il y ait 7 clips différents qui s'anime de la même façon (à la même vitesse) en se déplaçant à des endroits différents.

J'ai mis le code suivant pour le premier clip:

clip.move = function () {
destx = _root.xnew;
desty = _root.ynew;
posx = this._x;
posy = this._y;
velx = int((destx-posx)/speed*elastic+velx*friction);
vely = int((desty-posy)/speed*elastic+vely*friction);
this._x += velx;
this._y += vely;
}
Je ne sais pas si le code est parfait mais ca marche pour un clip... Si je met plusieurs clip, la solution suivante fonctionne et fait parfaitement ce que je voudrais (que chacun des clips aille à un endroit différent quand je clique sur l'un d'eux)

clip1.move = function () {
destx1 = _root.xnew1;
desty1 = _root.ynew1;
posx1 = this._x;
posy1 = this._y;
velx1 = int((destx1-posx1)/speed*elastic+velx1*friction);
vely1 = int((desty1-posy1)/speed*elastic+vely1*friction);
this._x += velx1;
this._y += vely1;
destw1 = _root.wnew1;
desth1 = _root.hnew1;
posw1 = this._width;
posh1 = this._height;
velw1 = int((destw1-posw1)/speed*elastic+velw1*friction);
velh1 = int((desth1-posh1)/speed*elastic+velh1*friction);
this._width += velw1;
this._height += velh1;
}
clip2.move = function () {
...
etc... et ainsi de suite

mais ce code là est vraiment affreux et je n'ose pas imaginer le désastre si je devais ajouter 10 nouveaux clips par exemple...

Je sais qu'il doit y avoir moyen de mettre une boucle genre
for (var i = 0;i<=7;i++), mais je connais pas grand chose au boucle, je ne sais pas exactement ou placer cette fonction (pour autant que ce soit la solution...)

Quelqu'un peut il me remettre sur le droit chemin ou me donner une adresse avec des bons tutos bien expliqués sur les boucles histoire que je comprenne comment ca fonctionne?

merci (j'espère avoir été assez clair dans mes explications...)

5 réponses

Messages postés
183
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
23 avril 2010

j'avais mis des rtour a la ligne dans mon texte, mais ca les a pas pris en compte... pas pratique pour lire le code... je ressaye:

clip.move = function () {
destx = _root.xnew ;
desty = _root.ynew ;
posx = this._x ;
posy = this._y ;
velx = (destx-posx)/speed*elastic+velx*friction ;
vely = (desty-posy)/speed*elastic+vely*friction ;
this._x += velx ;
this._y += vely ;
}
Messages postés
183
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
23 avril 2010

(voila c'est mieux, désolé pour les posts inutile, je remets tout, ca sera plus clair comme ca)

hello tous, j'ai un problème tout con je pense, mais je débute....
j'ai un clip qui se déplace avec un effet de ralentissement quand on clique dessus. Jusque là pas de problèmes ça fonctionne, mais en fait j'aimerais qu'il y ait 7 clips différents qui s'anime de la même façon (à la même vitesse) en se déplaçant à des endroits différents.
J'ai mis le code suivant pour le premier clip:

clip.move = function () {
destx = _root.xnew;
desty = _root.ynew;
posx = this._x;
posy = this._y;
velx = int((destx-posx)/speed*elastic+velx*friction);
vely = int((desty-posy)/speed*elastic+vely*friction);
this._x += velx;
this._y += vely;
}

Je ne sais pas si le code est parfait mais ca marche pour un clip... Si je met plusieurs clip, la solution suivante fonctionne et fait parfaitement ce que je voudrais (que chacun des clips aille à un endroit différent quand je clique sur l'un d'eux)

clip1.move = function () {
destx1 = _root.xnew1;
desty1 = _root.ynew1;
posx1 = this._x;
posy1 = this._y;
velx1 = int((destx1-posx1)/speed*elastic+velx1*friction);
vely1 = int((desty1-posy1)/speed*elastic+vely1*friction);
this._x += velx1;
this._y += vely1;
}
clip2.move = function () {
...
etc...
et ainsi de suite
mais ce code là est vraiment affreux et je n'ose pas imaginer le désastre si je devais ajouter 10 nouveaux clips par exemple...
Je sais qu'il doit y avoir moyen de mettre une boucle genre for (var i = 0;i<=7;i++), mais je connais pas grand chose au boucle, je ne sais pas exactement ou placer cette fonction (pour autant que ce soit la solution...) Quelqu'un peut il me remettre sur le droit chemin ou me donner une adresse avec des bons tutos bien expliqués sur les boucles histoire que je comprenne comment ca fonctionne?

merci (j'espère avoir été assez clair dans mes explications...)
Messages postés
345
Date d'inscription
jeudi 2 septembre 2004
Statut
Membre
Dernière intervention
25 octobre 2007

c'est d'apres moi une fonction qui serait la bienvenue ^^
Je n'utilise pas souvent for(pour ne pas dire jamais): voici un petit resume :
for répète en boucle les propriétés d'un objet ou d'éléments de tableau, puis exécute l'instruction statement pour chaque propriété ou élément. Les méthodes d'un objet ne sont pas énumérées par l'action for..in.

Certaines propriétés ne peuvent pas être énumérées par l'action for..in. Par exemple, les propriétés de clip, telles que _x et_y, ne sont pas énumérées. Dans les fichiers de classe externes, les membres statiques ne peuvent pas être énumérés, contrairement aux membres d'occurrences.

L'instruction for..in itère sur des propriétés des objets du chaînage de prototype de l'objet itéré. Les propriétés de l'objet sont énumérés en premier, puis les propriétés de son prototype immédiat, puis les propriétés du prototype du prototype, etc. L'instruction for..in n'énumère pas le même nom de propriété deux fois. Si l'objet child comporte un prototype parent et que tous deux contiennent la propriété prop, l'instruction for..in appelée pour child énumère les propriétés prop de child, mais ignore celles de parent.

Les accolades ({}), qui servent normalement à entourer le bloc d'instructions que l'instruction for..in doit exécuter, peuvent être omises si une seule instruction doit s'exécuter.

Si tu écris une boucle for..in dans un fichier de classe (un fichier externe AS), les membres d'instance ne seront plus disponibles pour la boucle, contrairement aux membres statiques. Cependant, si vous écrivez une boucle for..in dans un fichier FLA pour une occurrence de la classe, les membres de l'occurrence restent disponibles, contrairement aux membres statiques.

Wala, c'est on ne peut plus clair :p
Messages postés
183
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
23 avril 2010

hello, merci pour ta reponse, je vais essayer de dechiffrer tout ca (je n'ai pas encore l'habitude de tous ces termes techniques...) et de faire des essais voir si ca joue.

++
Messages postés
183
Date d'inscription
mercredi 29 novembre 2000
Statut
Membre
Dernière intervention
23 avril 2010

je n'y crois pas... tous ces jours à essayer en vain parce que j'ai mis un "_root" à la place d'un "this"...

ca devrait donner un code du style, ca semble correctement écrit?



for (i=1; i<=nombre de clip; i++) {


clip = this["clip"+i];


clip.move = function () {
dx = this.xnew ;
px = this._x ;
vx = (dx-px)/speed ;
this._x += vx ;
}
}


... en tout cas ca marche, merci pour tout