Toujours mon 'i' qui se bloque à la valeur max

Résolu
mikouRoux Messages postés 69 Date d'inscription jeudi 16 novembre 2006 Statut Membre Dernière intervention 6 octobre 2009 - 15 juil. 2007 à 11:53
cs_embalmer Messages postés 120 Date d'inscription mercredi 14 décembre 2005 Statut Membre Dernière intervention 10 décembre 2007 - 15 juil. 2007 à 17:02
ReResalut,

J'espère que vous n'allez pas finir par en avoir mare de moi et de mes questions stupides :D
Surtout toi embalmer qui déjà m'a sauvé la vie 2 fois hier. Encore un grand merci.

Cette fois ci, j'ai un problème pour charger un noeud XML
Théoriquement j'aimerais que le 'trace(i)' de la fonction m'affiche le numéro du clip 'dot'+i+'_mc'.
Exemple : quand dot5_mc alors i = 5.
Actuellement le 'i' à l'intérieur de la fonction onPress (celui qui est censé charger le bon noeud XML) reste bloqué à 17...

function onEnterFrame(){
    for(i=1; i<=16; i++){
        light(focus_mc=this['dot'+i+'_mc']);
        this['dot'+i+'_mc'].onPress = function(){           
            viewer_mc._visible = true;
            trace(i);
            trace(xml.firstChild.childNodes[i-1].attributes.image);
        }
    }
}

Merci d'avance
MikouRoux

5 réponses

cs_embalmer Messages postés 120 Date d'inscription mercredi 14 décembre 2005 Statut Membre Dernière intervention 10 décembre 2007
15 juil. 2007 à 15:08
Re,

Perso je fonctionne de 2 manières dans ce genre de situation :

Soit la manière de Peg' qui consiste à te créer à la vollé une variable contenant "i" à l'intérieur de ton clip cliqué, par exemple :

function onEnterFrame(){
    for(i=1; i<=16; i++){
        light(focus_mc=this['dot'+i+'_mc']);
        this['dot'+i+'_mc'].onPress = function(){
            this.nbr = i;
            trace(this.nbr);
            viewer_mc._visible = true;
            loadMovie(xml.firstChild.childNodes[nbr-1].attributes.image , _root.viewer_mc.roomPicture_mc)
        }
    }
}

Soit en récupérant le nombre contennu dans ton nom d'occurence (ex : 52 de 'dot52_mc') :

function onEnterFrame() {
    for (i=1; i<=200; i++) {
        light(focus_mc=this['dot'+i+'_mc']);
        this['dot'+i+'_mc'].onPress = function() {
            var number = this._name.substring(3, this._name.length-3);
            trace(number);
            viewer_mc._visible = true;
            loadMovie(xml.firstChild.childNodes[number-1].attributes.image, _root.viewer_mc.roomPicture_mc);
        };
    }
}

Voilà, voilà , par ailleurs lorsque tu attribue à ton clip un gestionnaire d'évènement onPress tu n'a pas besoin de le répéter dans un enterFrame.

PS : Ta question est loin d'être stupide, un forum c'est fait pour aider, quelque soit le niveau... on a tous débuté un jour

++
3
cs_embalmer Messages postés 120 Date d'inscription mercredi 14 décembre 2005 Statut Membre Dernière intervention 10 décembre 2007
15 juil. 2007 à 17:02
autant pour  moi j'ai écris une connerie sur ma 1 ère proposition. Il faut que tu fasse une première boucle pour créer la variable "nbr" et ensuite une  boucle pour ton évènement onPress

for (i=1; i<=6; i++) {
    this['dot'+i+'_mc'].nbr = i;
}
for (j=1; j<=6; j++) {
    this['dot'+j+'_mc'].onPress = function() {
        trace(this.nbr);
    };
}

++
3
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
15 juil. 2007 à 13:26
ce qu'il t'arrive est plus que normal :

Tu crées à la volée des fonctions "onPress", mais ton "i" continue jusqu'à la fin .. si tu traces "i", tu obtiendras toujours la même valeur partout.

Tu penses que ton "i" est figé dans la fonction de chaque bouton, alors que "i" est une variable qui évolue même après, ce qui te crées ce souci. La solution est de créer un "i" dans ton bouton et de l'appeller par "this.i", là il sera figé.

Peg'
0
mikouRoux Messages postés 69 Date d'inscription jeudi 16 novembre 2006 Statut Membre Dernière intervention 6 octobre 2009
15 juil. 2007 à 13:40
ca ne fonctionne toujours pas.
Cette fois ci avec 'this.i', il me retourne  : i : undefined

function onEnterFrame(){
    for(i=1; i<=16; i++){
        light(focus_mc=this['dot'+i+'_mc']);
        this['dot'+i+'_mc'].onPress = function(){
            trace("i : "+this.i);
            viewer_mc._visible = true;
            loadMovie(xml.firstChild.childNodes[i-1].attributes.image , _root.viewer_mc.roomPicture_mc)
        }
    }
}

++
0

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

Posez votre question
mikouRoux Messages postés 69 Date d'inscription jeudi 16 novembre 2006 Statut Membre Dernière intervention 6 octobre 2009
15 juil. 2007 à 16:04
Génial,

Je te remercie encore une fois ! Merci à toi aussi Peg.

Embalmer, la première solution donne le même résultat que celui de peg : nbr = undifined.
J'ai donc opté pour la deuxième solution, celle de récupérer le nombre dans mon nom d'occurence, ce qui marche très bien.
Il y a tout de même un côté un peu 'bricolage' qui me tracasse, mais ici ca fonctionne très bien :)

Sinon, pour le onPress je le répete dans le on enterFrame, car si je le met en dehors de la première fonction, j'ai ce fameux problème de i. Il ne trouve sa valeur que si onPress se trouve imbriqué dans onEnterFrame (J'espère que je suis assez compréhensible)

En tous les cas merci à vous ;) Vive ce forum :)
++
MikouRoux
0
Rejoignez-nous