0

我正在闪存中创建一个音序器。我有 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 个单独的轨道符号的情况下做到这一点?

4

2 回答 2

0

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

于 2012-10-25T09:55:04.093 回答
0

假设track1, track2, ...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;
        }
    }
}

我想这会对你有所帮助。

于 2012-10-25T13:00:16.140 回答