as3 想要 removeEventListener KeyboardEvent 以防止额外的文本输入并仅允许 1 个键盘事件

as3 want to removeEventListener KeyboardEvent to prevent additional text entry and allow only 1 keyboard event

提问人:Ulo Greer 提问时间:10/13/2023 最后编辑:Ulo Greer 更新时间:10/13/2023 访问量:28

问:

我正在构建一个简单的动画,我想使用任何按键前进,直到时间线中的某个帧,我想禁用任何随机按键并仅启用 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 keyboard事件,因为它仍然会随着随机按键而前进。任何指导将不胜感激。

ActionScript-3 RemoveEventListener

评论

0赞 Vesper 10/15/2023
key-down 和 key-up 是两个独立的事件,如果你捕捉到一个 key-down,key-up 仍然会发生,你的代码会重新添加侦听器。此外,如果您按下并松开另一个键,则将再次添加按键的侦听器,最终每次按键都会触发不止一次。重新思考事件处理的逻辑。
0赞 Ulo Greer 10/17/2023
谢谢晚祷。我的目标是创建一个由键盘控制但不重新添加侦听器的时间线导航,正如您所说,这会使按键次数加倍。
0赞 Vesper 10/17/2023
添加一组侦听器,或者更确切地说,在按键时添加一个侦听器,其内部逻辑包括检查以及按下的键。这并不容易,但它应该是处理此类代码和事件流的最佳方式。currentFrame

答: 暂无答案