AS3 - 删除事件侦听器失败

时间:2014-01-25 09:25:53

标签: actionscript-3 flash

这是我的代码,我不知道它为什么不删除事件监听器。

我想要做的是根据节拍打开和关闭声音。在第一次点击它完美地工作,但是当我想在第二次点击时删除声音时,它无法删除事件监听器。

plat.BEAT1.addEventListener(TouchEvent.TOUCH_BEGIN, BEATDown(plat.BEAT1, hihatz, 2));
plat.BEAT2.addEventListener(TouchEvent.TOUCH_BEGIN, BEATDown(plat.BEAT2,cymbalz, 4));    

function BEATDown (padNum, sounz, tiempo) {

    return function (e:TouchEvent) {

        var currentSound:Sound = null;
        var currentSoundChannel:SoundChannel;
        var active:int;

        if (padNum.currentFrame == 1) {
            padNum.gotoAndStop(3);
            padNum.addEventListener(Event.ENTER_FRAME, PlayBeats);
            active = 1;

        } else {
            padNum.gotoAndStop(1);
            padNum.removeEventListener(Event.ENTER_FRAME, PlayBeats);
            active = 0;
        }

        function playSound(sound:Sound):void
            {

                if (active == 0)
                {
                    // Stop playing ANY sound
                    currentSound = null;
                    currentSoundChannel = null;
                }
                else
                {
                    // Play a different sound
                    currentSound = sound;
                    currentSoundChannel = sound.play();
                }
            }


        function PlayBeats(event:Event):void
            {

                if (tiempo == 1) {
                    if (fl_SecondsElapsed <= 4) {
                        playSound(sounz);
                    }
                }
                if (tiempo == 2) {
                    if (fl_SecondsElapsed == 1 || fl_SecondsElapsed == 3) {
                        playSound(sounz);
                    }
                }
                if (tiempo == 4) {
                    if (fl_SecondsElapsed == 1) {
                    playSound(sounz);
                }

                }

            }

    }

}

编辑: 我要删除的监听器是 padNum.addEventListener(Event.ENTER_FRAME,PlayBeats); plat.BEAT1是按钮实例。我使用多个实例来触发不同的声音,每个根据Tiempo计数打开和关闭声音。

1 个答案:

答案 0 :(得分:0)

我会说这是因为你没有在同一个对象上添加/删除你的监听器; 是平台.BEAT1等平台.BEAT2是一样的吗?我猜不会。

我建议您尝试在此元素或父元素的舞台上添加EnterFrame侦听器,如果事件已正确删除。然后,如果您希望对象独立工作,请尝试定位正确的对象。

if (padNum.currentFrame == 1) {
    padNum.gotoAndStop(3);
    stage.addEventListener(Event.ENTER_FRAME, PlayBeats);
    active = 1;
} else {
    padNum.gotoAndStop(1);
    stage.removeEventListener(Event.ENTER_FRAME, PlayBeats);
    active = 0;
}