Création dynamique de bouton en as2 via XML

Résolu
fanatikx Messages postés 46 Date d'inscription mardi 17 janvier 2006 Statut Membre Dernière intervention 4 juin 2010 - 6 janv. 2010 à 22:20
M1cr0 Messages postés 6 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 6 avril 2010 - 6 avril 2010 à 03:37
Salut,

Alors j'ai une question qui me turlupine quelque peu au sujet d'un script en AS2 que je suis en train d'écrire

Mon but: créer un viewer via XML avec menu (aie)

Mon probleme : créer autant de bouton qu'il y a d'entrée dans le XML

J'ai fait ceci pour le moment
clip existant sur la scène: menu
clip existant dans la bibliotheque : btn avec un nom de liaison btn

//la liaison XML qui est OK
liaison_xml.onLoad = function (success:Boolean){
if(success){

//nbrImage = nombre d'image, nombre d'entrées dans le XML

for(i=0; i<nbrImage;i++){

//creation du bouton

menu.createEmptyMovieClip("btn_"+i, i);

//j'attache le bouton nouvellement crée au clip btn de la bibliotheque

menu["btn_"+i].attachMovie("btn", "btn_"+i,i);

//je crée le comportement du bouton crée
menu["btn_"+i].onRollOver=function(){
trace("id bouton courant = "+i);
}

}
//fin

Alors la création des clips est ok, le probleme est que mon rollOver trace("id bouton courant "+i); renvoit la derniere valeur de i. Disons que j'ai 2 images, au rollover j'aimerais que mon btn 1 me trace id bouton courant 1 et mon btn 2 me trace id bouton courant = 2 au lieu de cela j'ai, pour les deux boutons id bouton courant = 2 soit la derniere valeur de i dans la boucle.

Si quelqu'un pouvait m'aiguiller j'en serais ravi !

Merci d'avance !

10 réponses

Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
7 janv. 2010 à 09:29
Hello,
C'est un probleme recurent.

Dans un boucle, lors de la création d'une fonction, tu perd l'incrémentation "i" dans cette dernière.

La solution :
Créer une variable propre a chaque occurences de boutons dans la boucle que l'on lira dans la fonction.

Ex:
for(i=0; i<nbrImage;i++){
     menu.createEmptyMovieClip("btn_"+i, i);
     menu["btn_"+i].attachMovie("btn", "btn_"+i,i);

     menu["btn_"+i]._id = i;

     menu["btn_"+i].onRollOver=function(){
          trace("id bouton courant = "+this._id);
     } 
}


Voilà :-)
A+

-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
3
fanatikx Messages postés 46 Date d'inscription mardi 17 janvier 2006 Statut Membre Dernière intervention 4 juin 2010
7 janv. 2010 à 13:23
Salut,

Merci beaucoup pour ton aide, ca fonctionne et ca me débloque pleins de petits soucis concernant la création dynamique de clip sur la scène ! 1000 fois merci !
0
M1cr0 Messages postés 6 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 6 avril 2010
5 avril 2010 à 15:55
Salut, moi j'ai un soucis avec le code en question, ça marche nickel sauf que le premier bouton (bouton0 en l'occurence) ne s'affiche pas ^^

CODE

_root.createEmptyMovieClip("bouton"+i, nombrePhotos+i);
_root["bouton"+i].attachMovie("bouton", "bouton"+i, nombrePhotos+i);
_root["bouton"+i].id = i;
_root["bouton"+i]._x = 735;
_root["bouton"+i]._y = _root["bouton"+i]._height * i;
_root["bouton"+i].onRelease = function(){
trace(_root["bouton0"]);
}

Merci ^^
0
M1cr0 Messages postés 6 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 6 avril 2010
5 avril 2010 à 15:57
à la place de "trace(_root["bouton0"]);" c'est "trace(this.id);"
0

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

Posez votre question
fanatikx Messages postés 46 Date d'inscription mardi 17 janvier 2006 Statut Membre Dernière intervention 4 juin 2010
5 avril 2010 à 21:31
Salut,

Pourrais tu mettre le code au complet (la boucle en plus quoi), ca peut provenir d'un problème d'incrémentation de i ou i n'est jamais égal à 0.
0
M1cr0 Messages postés 6 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 6 avril 2010
5 avril 2010 à 22:09
Salut pourtant si, car il y a d'autres variables qui utilisent "i" et puis j'ai fait un test avec un trace() pour verifier que le movieclip "bouton0" est bien créé il est bien créé il vaut meme "" mais à la fin de la boucle sa valeur devient "undefined" tandis que les autres sont bien là

CODE
diapoXML.onLoad = function(ok){
if(ok){
nombrePhotos = this.childNodes[0].attributes.nombre - 1;
for(var i:Number = 0; i <= nombrePhotos; i++){
lien[i] = this.firstChild.childNodes[i].attributes.lien;
photosTab[i] = _root.createEmptyMovieClip("image" + i, i);
_root.createEmptyMovieClip("bouton"+i, nombrePhotos+i);
_root["bouton"+i].attachMovie("bouton", "bouton"+i, nombrePhotos+i);
_root["bouton"+i].id = i;
_root["bouton"+i]._x = 735;
_root["bouton"+i]._y = _root["bouton"+i]._height * i;
trace(_root["bouton0"]);
_root["bouton"+i].onRelease = function(){
trace(this.id);
}
}
}else{
trace("Erreur de chargement du fichier XML");
}
}

merci
0
M1cr0 Messages postés 6 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 6 avril 2010
5 avril 2010 à 22:11
"bouton0" vaut "_level0.bouton0" pardon.

(On ne peut pas editer les messages qu'on a posté ?)
0
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
5 avril 2010 à 22:14
et avec
trace(_root.bouton0);


?

-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
0
M1cr0 Messages postés 6 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 6 avril 2010
6 avril 2010 à 03:16
Le même problème :S...Je ne comprends vraiment pas
0
M1cr0 Messages postés 6 Date d'inscription vendredi 28 avril 2006 Statut Membre Dernière intervention 6 avril 2010
6 avril 2010 à 03:37
Finalement j'ai déplacé la boucle dans un autre évènement et ça fonctionne... J'ai vraiment du mal à comprendre des fois XD Merci bien en tout cas.
0
Rejoignez-nous