2009-10-30 5 views
0

Actuellement, je n'arrive qu'à tracer le dernier MC. Comment pourrais-je tracer les bonnes propriétés MC?Bouton Loop avec MouseEvent

private function levelsBG():void { 

     for (var i:Number=0; i<myXML.children().length(); i++) { 

      listText=new TextField ; 
      listMC=new MovieClip ; 
      listText.text=myXML.MEMBER[i][email protected]; 

      listMC.buttonMode=true; 
      listMC.mouseChildren=false; 
      listMC.addChild(listText); 
      addChild(listMC); 

      listMC.addEventListener(MouseEvent.MOUSE_OVER,listOver); 
     } 
    } 
    private function listOver(e:MouseEvent):void { 
     trace(e.target.parent.listText.text); 
    } 

Répondre

0

Eh bien, on dirait que vous faites quelque chose de vilain ici. En raison de la non déclaration de listText dans la fonction levelsBG, il semble que cette dernière doit être déclarée en dehors de la classe, et vous écrasez une référence à cet objet à chaque itération de votre boucle, la seule qui existe à la fin, est le tout dernier objet créé.

Ensuite, dans votre gestionnaire d'événements, vous parcourez l'arborescence d'affichage jusqu'à la classe dans laquelle cette référence existe et tracez le texte de celle-ci, de sorte que l'apparence est qu'elles sont toutes les mêmes.

Si votre intention est de tracer la propriété 'text' d'un champ de texte donné que vous avez nommé listText, vous devrez faire les choses différemment. Cet extrait devrait fonctionner, mais vous voudrez peut-être revoir votre compréhension de la façon dont les membres de la classe fonctionnent et peuvent être traités, par opposition aux enfants DisplayObjects?

private function levelsBG():void { 

      for (var i:Number=0; i<myXML.children().length(); i++) { 

        listText=new TextField ; 
        listMC=new MovieClip ; 
        listText.text=myXML.MEMBER[i][email protected]; 
        listText.name = "listText"; 

        listMC.buttonMode=true; 
        listMC.mouseChildren=false; 
        listMC.addChild(listText); 
        addChild(listMC); 

        listMC.addEventListener(MouseEvent.MOUSE_OVER,listOver); 
      } 
    } 
    private function listOver(e:MouseEvent):void { 
      trace(e.target.getChildByName("listText").text); 
    } 

} 
0

Puisque vous n'êtes pas en train de changer leurs positions (x & y), chaque mc apparaît au-dessus de la précédente. Comme tous les MovieClip sont de la même taille et que le dernier est en haut, seulement que mc recevra l'événement mouseOver. Changer leur position dans la boucle en utilisant quelque chose comme mc.x = i * WIDTH;

+0

i avait le mc.x = largeur * i type de là script, mais semble que chaque ListText utilise listMC comme support au lieu de listMC – Hwang

+0

séparés sont-ils tous les champs de texte affiché à différents endroits? – Amarghosh

+0

yup. après quelques recherches et des dures ma question correcte serait comment rendre un bouton duplicable fonctionnable individuellement? – Hwang