OnRelease dans boucle for ou le casse tete chinois puissance 10 !!

Résolu
pinkWisky Messages postés 77 Date d'inscription dimanche 13 juin 2004 Statut Membre Dernière intervention 17 décembre 2010 - 12 avril 2005 à 17:26
pinkWisky Messages postés 77 Date d'inscription dimanche 13 juin 2004 Statut Membre Dernière intervention 17 décembre 2010 - 13 avril 2005 à 11:59
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
A voir également:

5 réponses

cs_goldenboy68 Messages postés 1596 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 9 juin 2011 2
12 avril 2005 à 22:04
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
3
durand2504 Messages postés 163 Date d'inscription mercredi 10 novembre 2004 Statut Membre Dernière intervention 21 février 2006
12 avril 2005 à 17:50
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+
0
pinkWisky Messages postés 77 Date d'inscription dimanche 13 juin 2004 Statut Membre Dernière intervention 17 décembre 2010
12 avril 2005 à 18:26
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
0
pinkWisky Messages postés 77 Date d'inscription dimanche 13 juin 2004 Statut Membre Dernière intervention 17 décembre 2010
13 avril 2005 à 11:36
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
0

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

Posez votre question
pinkWisky Messages postés 77 Date d'inscription dimanche 13 juin 2004 Statut Membre Dernière intervention 17 décembre 2010
13 avril 2005 à 11:59
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
0
Rejoignez-nous