Я разрабатываю браузерную игру с использованием JavaScript, в которой игрок может перемещать аватар во всех четырех направлениях.
Для регистрации одновременных нажатий клавиш я наблюдаю события keydown
и keyup
и отслеживаю нажатия и отпускание клавиш. Таким образом, я могу перемещать аватар в диагональном направлении, если, например, одновременно нажаты курсор вверх и курсор вправо .
Это тот же принцип из этого ответа здесь в StackOverflow В Javascript, как мне узнать, нажимает ли пользователь одновременно две клавиши? с этой демонстрацией http://jsbin.com/iloxi.
Однако в этом решении есть недостаток, который также можно воспроизвести в демоверсии. Например, нажмите курсор вниз , затем также нажмите курсор вправо . Коробка теперь перемещается внизу справа. Теперь отпустите курсор вправо , продолжая нажимать курсор вниз . Коробка перестает двигаться. Что должно произойти, так это то, что коробка продолжает двигаться вниз.
Проблема в том, что JavaScript перестает отправлять курсор вниз keydown
событий, как только курсор вправо . Как только курсор вправо отпущен, невозможно узнать, что курсор вниз все еще нажимается.
Есть ли решение этой проблемы?
Обновление: Проблема с демо-версией заключается в том, что поле перемещается либо в keydown
, либо keyup
слушателей событий. Однако, как только второй ключ отпущен, больше не происходит событий keydown
для первого ключа. Мне интересно, есть ли решение для этого или это стандартное поведение JavaScript?
Чтобы исправить демонстрационный код, вам нужно вызвать функцию move()
в итерации времени ожидания (window.setTimeout()
).