这是我的代码,我不知道它为什么不删除事件监听器。
我想要做的是根据节拍打开和关闭声音。在第一次点击它完美地工作,但是当我想在第二次点击时删除声音时,它无法删除事件监听器。
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计数打开和关闭声音。
答案 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;
}