2009-10-30 56 views
0

目前我只设法追踪最后一个MC。我如何追踪正确的MC属性?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); 
    } 

回答

0

嗯,它看起来像你在这里做一些棘手的事情。

看来,由于没有在levelsBG函数中声明listText,因此它必须在类级别声明,并且在每次迭代中通过循环覆盖对该对象的引用,所以唯一一个在最后存在,是最后创建的对象。

然后,在您的事件处理程序中,您正在将显示树遍历到一个引用所在的类,并追踪该引用的文本,因此外观就是它们都是相同的。

如果您的意图是追踪任何给定文本字段的'文本'属性,您已经命名为listText,则需要稍微改变一下。这段代码应该可以工作,但是您可能需要重新理解您对类成员如何工作并且可以解决的理解,而不是使用DisplayObject子代?

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

既然你不改变自己的立场(x & y),每个MC将出现在之前的一个顶部。由于所有影片剪辑的大小相同,最后一个位于顶部,因此只有该MC会收到mouseOver事件。改变他们在循环中的位置使用类似mc.x = i * WIDTH;

+0

我确实有mc.x =宽*我种的脚本有,但好像每次listText使用listMC作为在不同的位置显示所有文本字段的持有人,而不是单独的listMC – Hwang

+0

? – Amarghosh

+0

是。经过一些搜索和严格的问题,我的正确问题是如何使重复按钮功能单独? – Hwang