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

fanatikx 46 Messages postés mardi 17 janvier 2006Date d'inscription 4 juin 2010 Dernière intervention - 6 janv. 2010 à 22:20 - Dernière réponse : M1cr0 6 Messages postés vendredi 28 avril 2006Date d'inscription 6 avril 2010 Dernière intervention
- 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 !
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Orange73 1393 Messages postés dimanche 28 novembre 2004Date d'inscription 2 août 2011 Dernière intervention - 7 janv. 2010 à 09:29
3
Merci
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)

Merci Orange73 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de Orange73
fanatikx 46 Messages postés mardi 17 janvier 2006Date d'inscription 4 juin 2010 Dernière intervention - 7 janv. 2010 à 13:23
0
Merci
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 !
Commenter la réponse de fanatikx
M1cr0 6 Messages postés vendredi 28 avril 2006Date d'inscription 6 avril 2010 Dernière intervention - 5 avril 2010 à 15:55
0
Merci
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 ^^
Commenter la réponse de M1cr0
M1cr0 6 Messages postés vendredi 28 avril 2006Date d'inscription 6 avril 2010 Dernière intervention - 5 avril 2010 à 15:57
0
Merci
à la place de "trace(_root["bouton0"]);" c'est "trace(this.id);"
Commenter la réponse de M1cr0
fanatikx 46 Messages postés mardi 17 janvier 2006Date d'inscription 4 juin 2010 Dernière intervention - 5 avril 2010 à 21:31
0
Merci
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.
Commenter la réponse de fanatikx
M1cr0 6 Messages postés vendredi 28 avril 2006Date d'inscription 6 avril 2010 Dernière intervention - 5 avril 2010 à 22:09
0
Merci
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
Commenter la réponse de M1cr0
M1cr0 6 Messages postés vendredi 28 avril 2006Date d'inscription 6 avril 2010 Dernière intervention - 5 avril 2010 à 22:11
0
Merci
"bouton0" vaut "_level0.bouton0" pardon.

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


?

-- Orange73 --

"L'homme n'est pas fait pour travailler, la preuve c'est que cela le fatigue" (Voltaire)
Commenter la réponse de Orange73
M1cr0 6 Messages postés vendredi 28 avril 2006Date d'inscription 6 avril 2010 Dernière intervention - 6 avril 2010 à 03:16
0
Merci
Le même problème :S...Je ne comprends vraiment pas
Commenter la réponse de M1cr0
M1cr0 6 Messages postés vendredi 28 avril 2006Date d'inscription 6 avril 2010 Dernière intervention - 6 avril 2010 à 03:37
0
Merci
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.
Commenter la réponse de M1cr0

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.