2010-07-07 3 views
0

J'ai beaucoup de MovieClips et chacun a un nom comme "mcDummyClosed" puis le nom de l'instance "slideDummyClosed". Un autre MovieClip a un lien vers, par exemple, slideDummyClosed que j'appelle alors DummyClosed. J'ajoute un événement MouseEvent.CLICK à DummyClosed.d'autres moyens d'obtenir des instances en plus de getChildByName()

Maintenant, sans ajouter slideDummyClosed à la scène, ni aucun autre MovieClip, puis-je obtenir une instance contenant une chaîne contenant son nom?

J'ai essayé d'utiliser getChildByName() mais cela ne semble fonctionner que si j'ai déjà ajouté le MC à trouver et à ajouter avant. Mon code ressemble à ceci:

public function lookHere(e:MouseEvent){ 
    //this is the function called by e.g. DummyClosed 
    currentView.removeChildAt(0); //remove the MC that was here before 
    var slideName:String = 'slide' + e.target.name; //the name of the instance 

    currentView.addChild(??); //how do I add slideName (e.g. slideDummyClosed) here? 
} 
+0

Si vous utilisez FlashDevelop et exportez le symbole, une classe de raccord sera automatiquement générée pour vous avec tous les noms de membres appropriés. Fondamentalement, couper l'étape getChildByName. J'ai tendance à me retrouver avec des choses comme, un symbole nommé com.company.project.AFunnyAnimation et puis je crée une classe dans mon projet appelé com.company.project.FunnyAnimation qui hérite de AFunnyAnimation (exposé via l'export d'un SWC). De cette façon, à l'intérieur de la classe FunnyAnimation, je peux accéder à tous les membres nommés de AFunnyAnimation en notation normale. C'est vraiment une question de flux de travail cependant. – Jotham

+0

J'ai lu cela comme "McDummyClosed" au début, comme "McDonalds", plutôt que "moveclipDummyClosed" et ça m'a fait lol. Il pourrait être amusant de classer les variables en leur donnant des rangs comme "sirDouble" ou "mrFloat". Quoi qu'il en soit, il semble que vous ayez besoin de garder un suivi de vos instances d'objets par nom au moment de leur création, ce que vous pourriez faire en les ajoutant par nom à un objet flash.utils.Dictionary et en récupérant les instances par nom plus tard. – Triynko

Répondre

0

Je suppose que vous voulez trouver un MovieClip spécifique avec juste en utilisant le nom de celui-ci pris de la « e.target.name »?

Je suppose que vous ne cliquez pas sur la même cible que vous souhaitez modifier. Une solution consiste à enregistrer tous les mc dans un tableau, puis à les faire défiler en comparant leurs noms et en retournant le nom correspondant.

+0

Cela fonctionnerait, j'espérais juste AS3 avait une méthode ou une classe qui me permettrait de trouver et d'appeler une instance d'un objet en utilisant son nom. – Bjorninn

+0

getChildbyName ("") est une telle fonction mais, comme vous l'avez remarqué, elle ne fonctionne que pour les objets displayObjects qui ont été ajoutés à displayList d'une manière ou d'une autre. C'est généralement une bonne idée de sauvegarder les références de tous les objets créés dans les tableaux/vecteurs, car ils peuvent facilement être éliminés lorsqu'ils ne sont plus utilisés. – lollertits

1

getDefinitionByName() peut fonctionner ici. Cela ressemble à ce que vous voulez, mais je ne l'ai jamais utilisé personnellement.

+0

oui à partir des sons de c'est ce que vous voulez. Vous devrez définir le lien pour chaque clip de la bibliothèque (cliquez sur les propriétés de chaque MovieClip dans la bibliothèque et vérifiez l'exportation pour ActionScript). Le nom de classe spécifié sera la chaîne requise. Ensuite, pour utiliser getDefinitionByName devrait ressembler à quelque chose comme var myClass: Class = getDefinitionByName ("className") en classe; var img: MovieClip = new myClass(); – Allan

+0

Ne pas getDefinitionByName retourne juste la classe mais pas l'instance spécifique de cette classe? J'ai déjà créé les instances des classes avant d'entrer dans lookHere. – Bjorninn

Questions connexes