javascript - 如何在触发 keyup 后继续 keydown 事件

标签 javascript events keydown keyup

我正在制作这款游戏​​(入侵者克隆)。我想左右移动船,按下控制键时船会开火。 问题是什么时候释放控制,船停止移动。 我已将此功能绑定(bind)到 keydown:

checkKey: function(e) {
    e = e || window.event;
    if (e.keyCode in map) {
        map[e.keyCode] = true;
        e.preventDefault();
        GAME.respond();         
    }

这是 keyup:

clearKey: function(e) {
    e = e || window.event;
    if (e.keyCode in map) {
        map[e.keyCode] = false;
    }               
    if (e.keyCode === 17){
        GAME.respond();
    }

GAME.respond() 看起来像这样:

respond: function(){
    console.log("map", map);
    if (map[17]) {
            SHIP.shoot();
        }
        if (map[37]) {
            SHIP.move(LEFT);
            return;
        }
        if (map[39]) {
            SHIP.move(RIGHT);
            return;
        }
        if (map[38]) {
            SHIP.move(UP);
            return;
        }
        if (map[40]) {
            SHIP.move(DOWN);
            return;
        }
},

按下的键通过映射对象(在别处声明)进行映射。 问题是在触发 keyup 事件之后,即使箭头键仍然按下也没有任何反应。如何恢复按下的键?

最佳答案

在我见过的大多数游戏中,移动键都放在游戏循环中。这意味着它会在每个循环中检查键盘映射并相应地移动,并且您已经将移动键放在响应中。我知道的另一件事是,如果你按住一个键,它会重复按键,直到你按下另一个键。这意味着它只会重复最后一次按键。因此,如果您检查循环中的状态而不是事件基础会更好。

关于javascript - 如何在触发 keyup 后继续 keydown 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46197383/

相关文章:

javascript - AngularJS 指令隔离范围

javascript - 在 javascript 中访问内部 div 值,没有 id 帮助

javascript - 如何以 Angular 在第二个 View 中发送参数值?

delphi - 如何检测组件内部外部 ADO 连接是否已连接或断开?

c++ - Qt 中的右键单击事件以打开上下文菜单

javascript - 如何知道按下的键是否没有字符码值

wpf - 将 PreviewKeyDown 中收到的键转换为字符串

javascript - 使用javascript从parse sdk中销毁 "User"

javascript - 当只调用一次 emit 时,自定义事件被多次触发

html - CSS 中的标签索引