Au secours ! (pb nom d'objet dynamique)

Au secours ! (pb nom d'objet dynamique) - Flash/ActionScript - Programmation

Marsh Posté le 17-09-2004 à 12:11:28    

Bonjour,
J'ai un problème certainement tout bête, mais que je n'arrive pas à résoudre. Je m'explique : je souhaite faire un truc du genre
_root.monClip_0.monTexteDynamic.text = "du texte";
_root.monClip_1.monTexteDynamic.text = "un autre texte";
_root.monClip_2.monTexteDynamic.text = "encore un autre texte";
 
Mais bien entendu, je veux remplacer 0, 1, 2 par une variable et mettre le tout dans une boucle. Mais je n'y arrive pas... j'ai essayé :
_root.this["monClip_"+unIndice].monTexteDynamic.text
et d'autres truc .... et toujours des messages d'erreur.
 
Pouvez-vous m'aider ?
 
Merci

Reply

Marsh Posté le 17-09-2004 à 12:11:28   

Reply

Marsh Posté le 17-09-2004 à 12:19:38    

Regarde du côté de la fonction eval()
 

Reply

Marsh Posté le 17-09-2004 à 13:05:29    

non, pas eval ! c'est très mal eval, récupérer les références par leur chemin absolu c'est vraiment pas objet.
 
sergenttrent > en fait tu es sur la voie.
 
dans un clip, les sous clips sont accessibles par une hashmap de leur nom. ex :


// je suis dans un clip, je veux accéder à son clip nommé pipo :
this["pipo"];
 
// je suis dans un clip, je veux accéder au clip pipi du clip pipo :
pipo["pipi"];
 
// si tu veux aller plus loin, utilises les références ex :
var monclip=this["nomDuClip" + n];
monClip.salut();


 
n'utilises pas _root, c'est le mal. en effet, si un jour tu décides de mettre ton anim dans un conteneur preload, c'est la fin des haricots. fais tout en relatif avec des _parent.
 
si ça ne marche toujours pas, indique clairement l'arborescence de ta scène

Reply

Marsh Posté le 17-09-2004 à 13:14:23    

d'ailleurs pour répondre à ton problème : _root.this n'a aucune signification.
 
dans un clip, this fait référence au clip courant.
si tu mets ton code direct dans la timeline principale, this fait référence au clip racine de ton animation, acessible par _root.
 
dans ce cas, _root == this.
 
pour ton truc, je sais pas vraiment comment c'est organisé mais en gros, un truc comme :
 


for(var i=0; i<n; ++i){
    this["monClip_"+i].monTexteDynamic.text="texte #"+i;
}


devrait le faire.
 
sinon, un truc qu'on oublie souvent en AS c'est le for..in. c'est vraiment méga pratique exemple sur un proto que j'avais fait qui stoppe tous les clips enfants d'un clip récursivement :


MovieClip.prototype.stopAll=function(){
 var clip;
 this.stop();
 for(clip in this)
 if(this[clip]._parent == this && this[clip] instanceof MovieClip)
 this[clip].stopAll();
}


Message édité par raytaller le 17-09-2004 à 13:15:16
Reply

Marsh Posté le 17-09-2004 à 13:21:10    

raytaller a écrit :



MovieClip.prototype.stopAll=function(){
 var clip;
 this.stop();
 for(clip in this)
 if(this[clip]._parent == this && this[clip] instanceof MovieClip)
 this[clip].stopAll();
}




ha ça par contre, j'aime bien ! :p

Reply

Marsh Posté le 17-09-2004 à 14:02:35    

remixé, avec l'indentation qui va bien :
 


MovieClip.prototype.stopAll=function(){
        this.stop();
        for(var clip in this)
                if(this[clip]._parent == this && this[clip] instanceof MovieClip)
                        this[clip].stopAll();
};


Message édité par raytaller le 17-09-2004 à 14:03:12
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed