2009-10-30 2 views
0

В настоящее время мне удается отслеживать последний MC. Как я могу отслеживать правильные свойства MC?Loop Button with 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

Ну, похоже, что вы здесь делаете что-то вроде этого.

Похоже, что из-за того, что listText не объявлен в функции levelsBG, он должен быть объявлен на уровне класса, и вы переписываете ссылку на этот объект на каждой итерации через ваш цикл, так что единственное, что существует в конце, является самым последним созданным объектом.

Затем в вашем обработчике событий вы перемещаете дерево отображения в класс, в котором находится эта одна ссылка, и отслеживая текст этого, поэтому внешний вид заключается в том, что они все одинаковы.

Если вы намерены проследить свойство «text» для любого заданного текстового поля, которое вы назвали listText, вам нужно будет по нему немного по-другому. Этот фрагмент должен работать, но вы можете пересмотреть свое понимание того, как члены класса работают и могут быть рассмотрены, в отличие от дочерних 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

Поскольку вы не меняете свои позиции (x & y), каждый MC появится на вершине предыдущего. Поскольку все мувиклипы имеют одинаковый размер, а последний - сверху, только тот mc получит событие mouseOver. Измените их положение в петле, используя что-то вроде mc.x = i * WIDTH;

+0

я сделал иметь mc.x = ширина * я вроде сценария, но кажется, что каждый listText использует listMC в качестве держателя вместо отдельного listMC – Hwang

+0

ли все текстовые поля отображаются в разных местах? – Amarghosh

+0

yup. после некоторых поисков и исправлений мой правильный вопрос будет заключаться в том, как сделать дублируемую кнопку функциональной отдельно? – Hwang