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