OnRelease dans boucle for ou le casse tete chinois puissance 10 !! [Résolu]

Signaler
Messages postés
77
Date d'inscription
dimanche 13 juin 2004
Statut
Membre
Dernière intervention
17 décembre 2010
-
Messages postés
77
Date d'inscription
dimanche 13 juin 2004
Statut
Membre
Dernière intervention
17 décembre 2010
-
Salut les flashouilleurs,






Je veux creer un menu dynamique via XML. La duplication de mes boutons
ainsi que le l'assignement du texte marchent. Le casse tete reside dans
le onRelease a la fin qui ne fonctionne pas (je veux une seule fonction
pour designer chaque action de chaque bouton):



function main_menu(){

rubs_info = XMLmenu.childNodes[0].childNodes[1].childNodes;
//trace(rubs_info.length);

rubs_title = new Array();
rubs_id = new Array();
tab_links = new Array();

//-- Mise en place des nom des boutons dans une boucle

for(i=0; i<rubs_info.length; i++){

rubs_title[i] = rubs_info[i].attributes.rubric_name;
rubs_id[i] = rubs_info[i].attributes.id;

tab_links.push({rub_name:rubs_info[i].attributes.rubric_name, goto:"rub_0"+rubs_info[i].attributes.id});
tab_links.

trace(i);
trace(rubs_title);
trace(rubs_id);
trace(tab_links[0].rub_name);
trace(tab_links[0].goto);

// on duplique le MC "main_menu_button"
_root.main_container.main_menu_button.duplicateMovieClip("main_menu_button"+i,i*1);

// on masque le MC de base
_root.main_container.main_menu_button._visible = 0;
//_root.main_container.main_menu_button0._visible = 0;

// on place les clips dupliques sur l'axe des x
_root.main_container["main_menu_button"+i]._x = 144*i-606;

// on attribue les valeur des chps texte
_root.main_container["main_menu_button"+i].main_menu_button_text = "";
_root.main_container["main_menu_button"+i].main_menu_button_text = rubs_title[i];

// Jusque la tout va bien
// on assigne une action pour chaque bouton
// bien entendu, c'est la que ca coince
_root.main_container["main_menu_button"+i].onRelease = function() {
gotoAndStop(tab_links[i].goto);
trace("lapin");
};

}
}



Comment recuperer ma variable i dans le onRelease ?? Est ce un Pb de
level ?? Merci de prendre le temps de me relire et de me repondre. Je
suis vraiment en galere...







PW

5 réponses

Messages postés
1596
Date d'inscription
samedi 3 janvier 2004
Statut
Membre
Dernière intervention
9 juin 2011
2
J'ai déjà rencontré ce problème...et en y réfléchissant, tu verras que c'est logique! Ta variable i est locale dans la boucle for, donc quand tu fais ton onRelease, elle conserve la dernière valeur qu'on lui a attribué (5 à priori chez toi!).

Solution:
Dans ta boucle "for", crées une propriété varI pour chaque bouton créé. Ton code ressemblera à cela après:
function main_menu(){

rubs_info = XMLmenu.childNodes[0].childNodes[1].childNodes;
//trace(rubs_info.length);

rubs_title = new Array();
rubs_id = new Array();
tab_links = new Array();

//-- Mise en place des nom des boutons dans une boucle

for(i=0; i<rubs_info.length; i++){

rubs_title[i] = rubs_info[i].attributes.rubric_name;
rubs_id[i] = rubs_info[i].attributes.id;

tab_links.push({rub_name:rubs_info[i].attributes.rubric_name, goto:"rub_0"+rubs_info[i].attributes.id});
tab_links.

trace(i);
trace(rubs_title);
trace(rubs_id);
trace(tab_links[0].rub_name);
trace(tab_links[0].goto);

// on duplique le MC "main_menu_button"
_root.main_container.main_menu_button.duplicateMovieClip("main_menu_button"+i,i*1);

// on masque le MC de base
_root.main_container.main_menu_button._visible = 0;
//_root.main_container.main_menu_button0._visible = 0;

// on place les clips dupliques sur l'axe des x
_root.main_container["main_menu_button"+i]._x = 144*i-606;

// on attribue les valeur des chps texte
_root.main_container["main_menu_button"+i].main_menu_button_text = "";
_root.main_container["main_menu_button"+i].main_menu_button_text = rubs_title[i];

// Jusque la tout va bien

// on assigne une action pour chaque bouton

// bien entendu, c'est la que ca coince

_root.main_container["main_menu_button"+i].varI=i;

_root.main_container["main_menu_button"+i].onRelease = function() {
gotoAndStop(tab_links[this.varI].goto);
trace("lapin");
};

}
}

C

C
C
Ca devrait fonctionner comme ça!

@+! Samy
Messages postés
163
Date d'inscription
mercredi 10 novembre 2004
Statut
Membre
Dernière intervention
21 février 2006

salut,



le i n'a de valeur que dans ta boucle (variable locale) donc
quand tu crée la fonction du onRelease, il n'existe plus, essais cela:

_root.temp=i



_root.main_container["main_menu_button"+i].onRelease = function() {
gotoAndStop(tab_links[_root.temp].goto);
trace("lapin");
};

A+
Messages postés
77
Date d'inscription
dimanche 13 juin 2004
Statut
Membre
Dernière intervention
17 décembre 2010

Salut,



Je viens d'essayer ta solution mais elle ne fonctionne pas. La var _root.temp se fige a la valeur "tab_links.length".



Un trace (_root.temp) dans le onRelease renvoie "5" systematiquement (
qq soit le bouton actionne'). En fin de compte, cette variable se
comporte exactement comme ma var i (elle ne depend plus de la boucle
for des que la fonction sur onRelease est actionnee)



Je ne crois pas avoir omis un detail. Merci tout de meme pour la rapidite de ta reponse...



@+

PW
Messages postés
77
Date d'inscription
dimanche 13 juin 2004
Statut
Membre
Dernière intervention
17 décembre 2010

yapaaaaaaaaaaaahhh !!



Merci Samy, tout s'eclaire a present dans ma tete et dans mon code...
En fait la varI est assignee directement dans les MC dupliques et grace
au this.varI, elle peut etre recuperee meme si elle est appellee
dans ma fonaction onRelease...

Franchement, un grand merci a tous les deux...



Question n°2 : j'ai fait un trace(tab_links[this.varI].goto)
dans mon onRelease et cela renvoie effectivement "rub_01", "rub_02",
etc. pour chaque bouton. Par contre, lorsque je clique deux fois de
suite sur le meme bouton, je ne me retrouve pas sur la meme frame.

ex : un clic sur le bouton "main_menu_button2" conduit a la frame
appelle "rub_02". Un 2eme clic sur le meme bouton va me conduire a la
frame nommee "rub_03". Pourtant, le trace(tab_links[this.varI].goto) me renvoie rub_02 et rub_02

??!!{}{}{}?? etrange, non ?



ä+

PW
Messages postés
77
Date d'inscription
dimanche 13 juin 2004
Statut
Membre
Dernière intervention
17 décembre 2010

en fait, je retire ma question n°2 qui fait preuve de debilite'
profonde. J'ai simplement remplace le gotoAndPlay par un gotoAndStop.



a plouch

PW