Boucle for

cs_smoochy Messages postés 183 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 23 avril 2010 - 1 sept. 2006 à 16:50
cs_smoochy Messages postés 183 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 23 avril 2010 - 5 sept. 2006 à 15:47
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

cs_smoochy Messages postés 183 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 23 avril 2010
1 sept. 2006 à 16:56
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 ;
}
0
cs_smoochy Messages postés 183 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 23 avril 2010
1 sept. 2006 à 17:00
(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...)
0
bibi_81 Messages postés 345 Date d'inscription jeudi 2 septembre 2004 Statut Membre Dernière intervention 25 octobre 2007
1 sept. 2006 à 19:44
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
0
cs_smoochy Messages postés 183 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 23 avril 2010
3 sept. 2006 à 16:26
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.

++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_smoochy Messages postés 183 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 23 avril 2010
5 sept. 2006 à 15:47
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
0
Rejoignez-nous