Création dynamique de bouton en as2 via XML [Résolu]

Signaler
Messages postés
46
Date d'inscription
mardi 17 janvier 2006
Statut
Membre
Dernière intervention
4 juin 2010
-
M1cr0
Messages postés
6
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
6 avril 2010
-
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

Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

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)
Messages postés
46
Date d'inscription
mardi 17 janvier 2006
Statut
Membre
Dernière intervention
4 juin 2010

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 !
Messages postés
6
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
6 avril 2010

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 ^^
Messages postés
6
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
6 avril 2010

à la place de "trace(_root["bouton0"]);" c'est "trace(this.id);"
Messages postés
46
Date d'inscription
mardi 17 janvier 2006
Statut
Membre
Dernière intervention
4 juin 2010

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.
Messages postés
6
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
6 avril 2010

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
Messages postés
6
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
6 avril 2010

"bouton0" vaut "_level0.bouton0" pardon.

(On ne peut pas editer les messages qu'on a posté ?)
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

et avec
trace(_root.bouton0);


?

-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Messages postés
6
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
6 avril 2010

Le même problème :S...Je ne comprends vraiment pas
Messages postés
6
Date d'inscription
vendredi 28 avril 2006
Statut
Membre
Dernière intervention
6 avril 2010

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.