首页 文章

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

提问于
浏览
1

我正在制作这个游戏(入侵者克隆; https://codepen.io/laughingskull/pen/NaWWzE?editors=0010) . 我想左右移动船,当按下控制时,船将射击 . 问题是当释放控制时,船停止移动 . 我已将此函数绑定到keydown:

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

这对于键盘:

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;
        }
},

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

1 回答

  • 1

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

相关问题