Variable qui perd sa valeur...

Résolu
karpediem Messages postés 49 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 22 septembre 2014 - 9 janv. 2009 à 00:48
karpediem Messages postés 49 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 22 septembre 2014 - 9 janv. 2009 à 22:36
Bonjour,

Je pense que c'est une erreur stupide de débutant, mais je commence à m'arracher les cheveux car je ne vois pas d'où ça peut venir...

Voila, j'ai mon code suivant :

for (var i= 0;i<=tb_reg_actif.length ;i++) {
    var j = tb_reg_actif[i][0];
    _level0["reg_"+ j].enabled = true;
    _level0["reg_"+ j]._alpha = Math.abs(tb_reg_actif[i][2]/total_biens*100);
    var txt = tb_reg_actif[i][1] + " (" + tb_reg_actif[i][2].toString() + ")" ;

trace(txt); // ICI J'AI LA BONNE VALEUR

    _level0["reg_"+ j].onRollOver = function(){
        _level0.info_bulle._visible = true;
        _level0.info_bulle.infotxt.text = this._name ;

trace(txt); // ICI J'AI LA VALEUR => ( )

    }
    _level0["reg_"+ j].onRollOut = function(){
        _level0.info_bulle._visible = false;
    }
}

Je n'y comprends vraiment rien car le contenu de ma var txt lors de mon 2eme trace() n'est même pas complètement vide, elle a tout de même gardé les "( )"...

Si quelqu'un pouvait me suggérer une explication / solution, ça éviterait que je m'arrache tous les cheveux de ma petite tête ;o))

Merci et excellente soirée

4 réponses

Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
9 janv. 2009 à 20:59
Hello,

c'est normal ! :-)

Tu déclare : var txt = tb_reg_actif[i][1] + " (" + tb_reg_actif[i][2].toString() + ")" ;

mais si tu fais ton trace() dans une autre fonction (ici onRollOver) tu perd la boucle for donc tes "i" ne sont pas reconnus ni meme le clip survolé.

Tu peux essayer cela :

for (var i=0;i<=tb_reg_actif.length ;i++) {
     var j = tb_reg_actif[i][0];
    _level0["reg_"+ j].enabled = true;
    _level0["reg_"+ j]._alpha = Math.abs(tb_reg_actif[i][2]/total_biens*100);
    _level0["reg_"+ j].txt = tb_reg_actif[i][1] + " (" + tb_reg_actif[i][2].toString() + ")" ;

     trace(_level0["reg_"+ j].txt);

    _level0["reg_"+ j].onRollOver = function(){
         _level0.info_bulle._visible = true;
         _level0.info_bulle.infotxt.text = this._name ;

         trace(this.txt);
    }

    _level0["reg_"+ j].onRollOut = function(){
          _level0.info_bulle._visible = false;
    }
}
3
karpediem Messages postés 49 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 22 septembre 2014
9 janv. 2009 à 21:59
T'es trop fort !!!
ça fonctionne du tonnerre !

Je pensais bien que je perdais la valeur de i une fois dans ma fonction, mais je pensais qu'en passant par la déclaration d'une variable, elle récupèrerait une valeur "absolue", indépendante de la façon dont elle avait été alimentée... Mais je vois bien que non => J'ai donc découverts un nouveau truc aujourd'hui !!!

Et puisque je t'ai sous la main, je vais en profiter pour te demander ton avis si tu le veux bien...

Voila, ce traitement se fait sur les régions de France. J'ai donc dans ma scène principale 1 movieclip par région (les "reg_"+i). Une fois que l'on clique sur une région, il faut que j'affiche les départements de cette région, sur lesquels je fais un traitement similaire à celui des régions...
La question que je me pose est quelle est la meilleure façon de mettre ça en oeuvre ? Est-ce que je reste sur la même scène et je fais un "gotoandplay" sur le n° d'image qui va bien et qui contiendrait le clip de la région correspondante avec ses départements ou est-ce que je change de scène ? Par exemple, une scene qui correspondrait à une region. L'idée étant de mutualiser le code sans que tout se mélange...
Je ne sais pas si je suis bien claire...
As-tu une idée sur ce point là ?

En tout cas, un grand MERCI pour ta solution, je ne l'aurai pas trouvée toute seule.

Encore MERCI et à bientôt !!
0
Orange73 Messages postés 1375 Date d'inscription dimanche 28 novembre 2004 Statut Membre Dernière intervention 2 août 2011
9 janv. 2009 à 22:12
Conseil :
Evite d'utiliser les scene... souvent du a certain bug !

Donc utilise plutot ta premiere solution avec les gotoAndPlay(Frame);
0
karpediem Messages postés 49 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 22 septembre 2014
9 janv. 2009 à 22:36
Super, Merci, je vais suivre ton conseil !

Franchement ça fait du bien de ne pas se sentir seule au monde

Je prends donc l'option tout sur la même scène.

Encore MERCI et @ + car je pense que l'on se reverra sur ce forum ;o)
0
Rejoignez-nous