Наблюдение за событиями нажатия клавиш в JavaScript при одновременном нажатии двух клавиш - PullRequest
2 голосов
/ 25 января 2011

Я разрабатываю браузерную игру с использованием JavaScript, в которой игрок может перемещать аватар во всех четырех направлениях.

Для регистрации одновременных нажатий клавиш я наблюдаю события keydown и keyup и отслеживаю нажатия и отпускание клавиш. Таким образом, я могу перемещать аватар в диагональном направлении, если, например, одновременно нажаты курсор вверх и курсор вправо .

Это тот же принцип из этого ответа здесь в StackOverflow В Javascript, как мне узнать, нажимает ли пользователь одновременно две клавиши? с этой демонстрацией http://jsbin.com/iloxi.

Однако в этом решении есть недостаток, который также можно воспроизвести в демоверсии. Например, нажмите курсор вниз , затем также нажмите курсор вправо . Коробка теперь перемещается внизу справа. Теперь отпустите курсор вправо , продолжая нажимать курсор вниз . Коробка перестает двигаться. Что должно произойти, так это то, что коробка продолжает двигаться вниз.

Проблема в том, что JavaScript перестает отправлять курсор вниз keydown событий, как только курсор вправо . Как только курсор вправо отпущен, невозможно узнать, что курсор вниз все еще нажимается.

Есть ли решение этой проблемы?

Обновление: Проблема с демо-версией заключается в том, что поле перемещается либо в keydown, либо keyup слушателей событий. Однако, как только второй ключ отпущен, больше не происходит событий keydown для первого ключа. Мне интересно, есть ли решение для этого или это стандартное поведение JavaScript?

Чтобы исправить демонстрационный код, вам нужно вызвать функцию move() в итерации времени ожидания (window.setTimeout()).

1 Ответ

1 голос
/ 25 января 2011

Может быть, я вас неправильно понимаю, но разве вы не должны просто ждать события keyup при наведении курсора вниз? то есть курсор вниз нажимается, пока вы не получите keyup для него - вы не должны полагаться на повторяющиеся keydown отправляемые события.

...