Как продолжить событие нажатия клавиш после запуска

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();         
    }

и это к 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, даже когда клавиши со стрелками все еще не работают, ничего не происходит. Как восстановить следующие нажатые клавиши?

  • 0
    Посмотрите на пример Phaser.js Invaders, как его реализация должна дать вам подсказку о том, как это сделать. phaser.io/examples/v2/games/invaders
Теги:
events
keydown
keyup

1 ответ

1
Лучший ответ

В большинстве игр, увиденных, клавиши перемещения помещаются в галлуп. Это означает, что он проверяет каждую комбинацию клавиш и перемещается соответственно, и вы положили свои клавиши перемещения в ответ. Еще одна вещь, которую я знаю, это то, что если вы нажмете клавишу и удерживаете ее, она повторяет нажатие клавиши, пока вы не нажмете еще одну клавишу. Это означает, что он будет повторять только последнее нажатие. Поэтому было бы лучше, если бы вы проверили состояние в цикле, а не на основе события.

  • 0
    Действительно, это было единственное, что сработало - игровой цикл. Теперь это работает отлично.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню