"Automatiser" un code apres une boucle for

Résolu
Ariranha
Messages postés
79
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
27 juillet 2011
- 9 juin 2009 à 08:24
pegase31
Messages postés
6138
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
- 11 juin 2009 à 00:50
Bonjour,

J'attache sur ma scène des movieClips venant de la bibliothèque à l'aide d'une boucle for :

for (i=0; i<4; i++) {
    attachMovie("id"+i,"id"+i,this.getNextHighestDepth(),{_x:idX, _y:100});
    idX += 100;
}


Ensuite j'aimerai "automatiser" une partie du code afin que je n'ai pas à le réécrire pour chaque entité ("id"+i)
Imaginons que chaque élément puisse être "drag 'n droper" : pour ne pas devoir réécrire le code pour chaque élément, quelle serait la bonne syntaxe (pour la partie en rouge du code ci-dessous) :

id[i].onPress = function() {
    startDrag(this);
    this.swapDepths(1000);
};


Si quelqu'un à la solution, ça serait vraiment sympa de la partager.

Bonne journée.

8 réponses

pegase31
Messages postés
6138
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
11
9 juin 2009 à 11:29
Bonjour,

Pourquoi ne mets-tu pas directement ton code dans la boucle ?

Peg'
3
pegase31
Messages postés
6138
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
11
9 juin 2009 à 11:45
oui; il suffit juste de savoir que tu peux faire ça :

var monClip:MovieClip = attachMovie(....

Et le tour est joué.

Peg'
3
pegase31
Messages postés
6138
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
11
11 juin 2009 à 00:50
parceque tu recrées ton tableau à chaques boucles au lieu de simplement ajouter le clip dedans .. c'est pourtant logique.

Tu crées ton tableau avant et tu fais un simple push de ton objet créé.

Peg'
3
Ariranha
Messages postés
79
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
27 juillet 2011

9 juin 2009 à 11:43
C'est un bon début que tu me donne là "pegase31".

Mettre le code dans la boucle : je n'y avais tout simplement pas pensé, mais c'est vrai que ça a du sens.

J'ai donc essayé de mettre le code dans la boucle :

for (i=0; i<4; i++) {	
attachMovie("id"+i,"id"+i,this.getNextHighestDepth(),{_x:idX, _y:100});
idX += 100;

id[i].onPress = function() {
startDrag(this);
this.swapDepths(1000);
};


Mais je n'ai toujours pas la syntaxe qui va avec. Si au lieu de id[i], je mets this cela ne marche pas. Je ne vois vraiment pas comment faire.

Une solution, une piste?
0

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

Posez votre question
Ariranha
Messages postés
79
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
27 juillet 2011

9 juin 2009 à 12:07
Merci beaucoup, pour cette réponse qui est largement acceptée.

Tout de même, j'aurais une autre question :

- Je voudrais maintenant créer une autre boucle pour attacher sur
la scène des targets (tab[j]). Ci dessous le code de relation :

monID.onRelease = monID.onReleaseOutside=function () {
stopDrag();
if (this.hitTest(tab1)) {
this._x = tab1._x;
this._y = tab1._y;
this.enabled = false;
} 
};


Quel est la "meilleure" solution pour que je puisse remplacer
tab1 par tab[j], dans le code ci-dessus. Car il faut savoir que tous les
targets conviennent à chaque monID et que seulement aprés un clic
btn je fasse quelque chose du genre if ([i] == [j]){
"réponse bonne";
}else{
"monID retourne à sa place
initiale";
}

Merci beaucoup pour ton aide.
0
pegase31
Messages postés
6138
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
11
9 juin 2009 à 20:50
Il y a une solution simple : placer chacun des éléments que tu as dans un tableau et parcourir les cases du tableau en évitant celle de ton éléments sur lequel tu as cliqué.
c'est bourrin, mais ça marche.

Peg'
0
Ariranha
Messages postés
79
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
27 juillet 2011

10 juin 2009 à 15:58
Encore merci pour avoir répondu, après si tu me dis que c'est "bourrin", est ce que tu vois une autre solution (pas besoin de pondre un code tout prêt, mais plutôt des pistes de recherche)?
0
Ariranha
Messages postés
79
Date d'inscription
mercredi 1 août 2007
Statut
Membre
Dernière intervention
27 juillet 2011

11 juin 2009 à 00:17
Y a quand même quelque chose qui m'échappe, voici a quoi ressemble la boucle maintenant :


for (i=1; i<9; i++) {

    var monTAB:Array = attachMovie("tab"+i, "tab"+i, this.getNextHighestDepth(), {_x:tabX, _y:tabY});

    var monID:MovieClip = attachMovie("id"+i, "id"+i, this.getNextHighestDepth(), {_x:idX, _y:idY});

}


Je mets donc des fonds au tableau, mais lorsque que je fais ceci :


if (this.hitTest(monTAB))

Pourquoi est-ce que le hitTest reste bloqué sur le dernier tab attaché soit tab8, je pensais pouvoir appliquer le principe que tu expliquais plus haut soit de définir un nom générique à une variable [monID:MovieClip], dommage
0