我正在构建一个简单的动画,我想使用任何按键前进,直到时间轴中的某个帧,我想禁用任何随机按键并仅启用 Enter 键前进到下一帧。
我不太擅长 AS3,并且在时间线内删除 EventListener 似乎对我不起作用(因为我显然做错了)。
这是我使用任何键前进的代码(除了 kb Left 和 Up)
stage.addEventListener(KeyboardEvent.KEY_DOWN, pressAnyKeyAdvanceButLeftGoBackward1);
stage.addEventListener(KeyboardEvent.KEY_UP, resetKeyListener);
function pressAnyKeyAdvanceButLeftGoBackward1(event:KeyboardEvent):void
{
stage.removeEventListener(KeyboardEvent.KEY_DOWN, pressAnyKeyAdvanceButLeftGoBackward1);
switch (event.keyCode)
{
case Keyboard.LEFT :
prevFrame();
break;
case Keyboard.UP :
gotoAndStop(1);
break;
default :
nextFrame();
break;
}
}
function resetKeyListener(event:KeyboardEvent):void
{
stage.addEventListener(KeyboardEvent.KEY_DOWN, pressAnyKeyAdvanceButLeftGoBackward1);
}
然后我想删除(或禁用)它并将其放在原来的位置
stage.removeEventListener(KeyboardEvent.KEY_DOWN, pressAnyKeyAdvanceButLeftGoBackward1);
stage.addEventListener(KeyboardEvent.KEY_DOWN, enterkey1);
function enterkey1(event:KeyboardEvent):void {
if (event.keyCode==13) {
gotoAndStop(26);
stage.removeEventListener(KeyboardEvent.KEY_DOWN, enterkey1);
}
}
这似乎并没有删除 pressanykey 键盘事件,因为它仍然随着随机按键而前进。任何指导将非常感激。
在 keyUp 上重新添加事件侦听器的 resetKeyListener 函数对我来说似乎有点不必要。
如果您担心每帧都会重复添加事件监听器,我建议将您的时间线包含在 MovieClip 中,并在父级上编写代码,以便每次时间线动画的帧发生变化时都不会重新执行代码.
我还建议您可能不需要 2 个不同的关键处理函数,而可以只使用 1 个函数,其中包含确定结果行为的逻辑。这样您就不必担心添加和删除事件侦听器。
例如,如果您在名为“timelineMC”的 MovieClip 中有时间轴动画,则父级上的代码可能如下所示:
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyHandler);
function keyHandler(event:KeyboardEvent):void
{
if (timelineMC.currentFrame < 26)
{
switch (event.keyCode)
{
case Keyboard.LEFT :
timelineMC.prevFrame();
break;
case Keyboard.UP :
timelineMC.gotoAndStop(1);
break;
default :
timelineMC.nextFrame();
break;
}
} else if (event.keyCode == Keyboard.ENTER) {
timelineMC.nextFrame();
}
}
这样如果时间轴MC的当前帧小于26,将使用switch语句的逻辑。否则,仅当键码为 Keyboard.ENTER
时才前进帧