Actionscript 3 AS3:如何识别按下了哪个按钮?

Actionscript 3 AS3:如何识别按下了哪个按钮?,actionscript-3,flash,Actionscript 3,Flash,我有一个MovieClip,里面有一个名为t_bt的按钮。我已将该MovieClip导出到动作脚本,并为其命名为e_panel。我创建了50个e_panel实例,以使用此代码进行后台处理: var e_p_y:Number=0; for ( var i:Number=1;i<=50;i++) { var e_p:MovieClip = new e_panel(); e_p.x = 50; e_p.y = e_p_y; e_p.t_bt.addEventLi

我有一个
MovieClip
,里面有一个名为
t_bt
的按钮。我已将该
MovieClip
导出到动作脚本,并为其命名为
e_panel
。我创建了50个
e_panel
实例,以使用此代码进行后台处理:

var e_p_y:Number=0;

for ( var i:Number=1;i<=50;i++)
{
    var e_p:MovieClip = new e_panel();
    e_p.x = 50;
    e_p.y = e_p_y;
    e_p.t_bt.addEventListener(MouseEvent.MOUSE_UP, f1);
    addChild(e_p);
    e_p_y = e_p_y+105;
} 

e_面板剪辑必须有一个关联的e_面板类,该类扩展MovieClip,并(例如)添加一个索引属性来保存项目的索引

然后,在f1上,您可以执行以下操作:

function f1(event:MouseEvent):void
{
    var e_panel:E_Panel = event.currentTarget.parent as E_Panel;
    trace(e_panel.index);
}
记住在创建电影剪辑时设置索引属性

希望能有帮助

额外信息

为E_面板创建一个类,并将其链接到具有库属性的movieClip

public class E_Panel extends MovieClip 
{

    private var _index:int;

    public function E_Panel(index:int) 
    {
        super();
        _index = index;
    }

    public function get index():int {
        return _index;
    }
}
然后在代码中:

var e_p:E_Panel = new e_panel(i); //"i" is the iteration counter
e_p.x = 50;
... //Etc

每个事件都有一个名为
currentTarget
的属性,该属性将是对添加事件侦听器的对象的引用

因此,在你的情况下:

function f1(event:MouseEvent):void
{
     var t_bt:DisplayObject = event.currentTarget as DisplayObject; //would be the t_bt instance that was clicked (typed as a basic object)
     var e_p:MovieClip = DisplayObject(event.currentTarget).parent as MovieClip //would be the e_p of the item clicked

     //so if you wanted to do something like make the whole panel half transparent once clicked
     e_p.alpha = .5;

     //if you wanted to get the index of the button clicked
     trace("Button Clicked: ", e_p.parent.getChildIndex(e_p));
}
相反,事件的
target
属性是单击的实际显示对象(可能与
currentTarget
相同,也可能是
currentTarget
的子级)。

请尝试以下代码:

var e_p_y:Number=0;
for ( var i:Number=1;i<=50;i++)
{
    var e_p:MovieClip= new e_panel();
    e_p.x=50;
    e_p.y=e_p_y;
    e_p.t_bt.addEventListener(MouseEvent.MOUSE_UP, f1);
    addChild(e_p);
    e_p_y=e_p_y+105;

    e_p.name= i+'';

}

getChildIndex(DisplayObject(event.currentTarget))感谢@edrian,如何在创建电影剪辑时设置索引属性?@Fanous I添加了额外的内容info@edrian-heads up-
事件。currentTarget
实际上将是
b_t
实例,而不是
E_面板
。谢谢@LDMS!,如果b_t是e_panel的子级,则可以通过event.currentTarget访问它。parent@edrian-是的,虽然您可能需要在访问parent属性之前强制转换以避免编译器错误。谢谢@LDMS,但我通过addChild添加了50项e_p,它们都有e_p父名称和t_bt currentTarget,如何识别用户按下了哪个按钮?您想如何“识别”它?我的示例提供了对单击的单个对象的引用。我不确定你到底想对点击的项目做什么。如果你只想给每个项目贴上标签,你可以使用name属性。我知道如何识别单个对象,但我说我在stage中添加了50个e_面板,然后,我想识别用户按下了哪个按钮,我的意思是我在stage上有50个按钮,由addchild创建,当用户按下其中一个按钮时,我如何理解按下了哪个按钮?正如我的回答一样,
event.currentTarget
是被按下的按钮(共50个)。如果您想要索引(其他人似乎认为您想要索引,但这不是您问题的一部分),可以使用
DisplayObject(event.currentTarget).parent.getChildIndex(DisplayObject(event.currentTarget))我想它只是跟踪“t_bt”,而不是e_p的名字!
var e_p_y:Number=0;
for ( var i:Number=1;i<=50;i++)
{
    var e_p:MovieClip= new e_panel();
    e_p.x=50;
    e_p.y=e_p_y;
    e_p.t_bt.addEventListener(MouseEvent.MOUSE_UP, f1);
    addChild(e_p);
    e_p_y=e_p_y+105;

    e_p.name= i+'';

}
function f1(event:MouseEvent):void
{
    trace(event.currentTarget.name);
}