Клавиша Javascript: пробел + клавиши курсора

У меня проблема с получением ввода от клавиш курсора в событии нажатия клавиши. Я использую событие нажатия клавиши для пробела и событие нажатия клавиши со стрелкой одновременно (в игре spaceinvaders вы должны иметь возможность перемещаться И стрелять с помощью пробела одновременно).

Корабль должен иметь возможность двигаться по осям x и y одновременно, пока нажата клавиша пробела. Теперь актуальная проблема: всякий раз, когда для стрельбы нажимается пробел, я могу двигаться вверх и вперед, но не вперед и вниз. Я также могу двигаться назад и вниз, но не назад и вверх. когда пробел не нажат, он работает, и я могу двигаться по диагонали. То же самое относится и к ключам wasd.

    if (e.keyCode == 37 || e.keyCode == 38 || e.keyCode == 39 || e.keyCode == 40) 
    e.preventDefault();

       if (e.keyCode == 32){
             e.preventDefault();
             spaceState = true;
       }

       if (e.keyCode == 87 || e.keyCode == 38) keyState["UpDown"]="w";//w
       if (e.keyCode == 83 || e.keyCode == 40) keyState["UpDown"]="s";//s

       if (e.keyCode == 65 || e.keyCode == 37) keyState["RightLeft"]="a";//a
       if (e.keyCode == 68 || e.keyCode == 39) keyState["RightLeft"]="d"; //d

комбинация w и d работает комбинация s и a работает

w,a и s,d НЕ работают

Тем не менее все комбинации работают, когда пробел не нажат, комбинации wasd работают, даже когда пробел возвращает событие нажатия клавиши. Вопрос просто в том, почему?


person user3605638    schedule 14.12.2013    source источник
comment
Только что проверил это в Chrome с моей клавиатурой Razer BlackWidow, и, по крайней мере, для меня все комбинации клавиш работают нормально.   -  person adeneo    schedule 14.12.2013
comment
у меня тоже работает.jsfiddle.net/A3S23/2   -  person Nouphal.M    schedule 14.12.2013


Ответы (1)


Недавно я ответил на очень похожий вопрос, поэтому просто скопирую мой ответ оттуда.

Скорее всего, это не имеет ничего общего с вашим кодом. Многие клавиатуры из соображений экономии не способны одновременно поддерживать все комбинации из 3 и более клавиш и специально предназначены для поддержки широко используемых комбинаций (таких как Ctrl+Alt+Del). Явление известно как «привидение».

См. эту страницу от Microsoft для подробного объяснения.

person Chris Hayes    schedule 14.12.2013