Variable qui perd sa valeur... [Résolu]

Signaler
Messages postés
49
Date d'inscription
mardi 30 mars 2004
Statut
Membre
Dernière intervention
22 septembre 2014
-
karpediem
Messages postés
49
Date d'inscription
mardi 30 mars 2004
Statut
Membre
Dernière intervention
22 septembre 2014
-
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

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

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;
    }
}
Messages postés
49
Date d'inscription
mardi 30 mars 2004
Statut
Membre
Dernière intervention
22 septembre 2014

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 !!
Messages postés
1393
Date d'inscription
dimanche 28 novembre 2004
Statut
Membre
Dernière intervention
2 août 2011

Conseil :
Evite d'utiliser les scene... souvent du a certain bug !

Donc utilise plutot ta premiere solution avec les gotoAndPlay(Frame);
Messages postés
49
Date d'inscription
mardi 30 mars 2004
Statut
Membre
Dernière intervention
22 septembre 2014

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)