在动作脚本3中识别后代

时间:2012-10-25 09:50:07

标签: actionscript-3 flash button actionscript event-handling

我正在flash中创建一个音序器。我有8个符号轨道实例,每个实例都有一个播放按钮。我想使用单个事件监听器来处理自己播放每个样本。我遇到的问题是我不能给每个按钮一个唯一的实例名称,因为它在轨道影片剪辑中。 这是我的代码:

masterContainer.addEventListener(MouseEvent.CLICK, clickHandler);
function clickHandler(event:MouseEvent):void{
if(event.target.name == "masterPlay"){
    trace("master play was clicked");
}
if(event.target.name == "silglePlay1"){
    trace("track 1 play button");
}
if(event.target.name == "silglePlay2"){
    trace("track 2 play button");
}
}

所有曲目都在主容器内加上主控件。 单个播放按钮位于轨道符号的旁边。 不确定代码是否有帮助,但有没有办法在不创建8个单独的轨道符号的情况下这样做?

2 个答案:

答案 0 :(得分:0)

处理跟踪影片剪辑中的单击事件,然后在事件处理程序中使用冒泡方式调度您自己的自定义事件,您可以处理该事件并将event.target与您可以唯一的轨道实例名称进行比较。换句话说,你的轨道组件应该是自给自足的并且封装它自己的逻辑,在这种情况下是播放按钮点击处理。

答案 1 :(得分:0)

假设track1track2,...,track8是您正在使用的曲目,并且所有曲目中的播放按钮均为playBtn。然后你可以为所有人创建一个单一的监听器,而不会在轨道中为播放按钮设置不同的名称。 (我像你一样添加了masterContainer的听众)

masterContainer.addEventListener(MouseEvent.CLICK, clickHandler);

function clickHandler(event:MouseEvent):void{
    var tapped = e.target;

    if(tapped.name == "masterPlay"){
        trace("master play was clicked");
    }

    if(tapped.name == "playBtn"){
        switch(tapped.parent.name){
            case "track1":
                trace("track 1 play button");
                break;
            case "track2":
                trace("track 2 play button");
                break;
            case "track3":
                trace("track 3 play button");
                break;
            case "track4":
                trace("track 4 play button");
                break;
            case "track5":
                trace("track 5 play button");
                break;
            case "track6":
                trace("track 6 play button");
                break;
            case "track7":
                trace("track 7 play button");
                break;
            case "track8":
                trace("track 8 play button");
                break;
        }
    }
}

我想这会对你有帮助。