Actionscript 3 带MouseEvent的循环按钮
目前我只追踪到了最后一个MC。如何跟踪正确的MC属性Actionscript 3 带MouseEvent的循环按钮,actionscript-3,Actionscript 3,目前我只追踪到了最后一个MC。如何跟踪正确的MC属性 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].@N
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].@NAME;
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);
}
私有函数levelsBG():void{
对于(变量i:Number=0;i,因为您没有改变它们的位置(x
&y
),每个mc将显示在前一个的顶部。由于所有movieclips的大小相同,而最后一个位于顶部,因此只有该mc将接收到鼠标悬停
事件。使用类似于mc.x=i*WIDTH;
的方法更改它们在循环中的位置。好吧,看起来您在这里做了一些扭曲的事情
看起来,由于没有在levelsBG函数中声明listText,它必须在类级别声明出来,并且在循环的每次迭代中都会覆盖对该对象的引用,因此最后唯一存在的是创建的最后一个对象
然后在事件处理程序中,向上遍历显示树,找到该引用所在的类,并跟踪该引用的文本,因此看起来它们都是相同的
如果您的目的是跟踪已命名为listText的任何给定textfield的“text”属性,则需要稍微改变。此代码段应该可以工作,但您可能希望重新了解类成员的工作方式和地址,而不是子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].@NAME;
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);
}
}
私有函数levelsBG():void{
对于(var i:Number=0;ii)来说,这里确实有mc.x=width*i脚本,但似乎每个listText都使用listMC作为持有者,而不是单独的listMCAre所有文本字段都显示在不同的位置?是的。经过一些搜索和思考后,我正确的问题是如何使重复的按钮单独工作?