2009-10-30 86 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