Я новичок в JS, поэтому я мог сделать какую-то глупую ошибку, но мой кейлоггер, похоже, работает неправильно. Он правильно принимает несколько нажатий клавиш, но когда одно из них отпущено, оно распознает оба нажатия. Любая помощь?
Вот мой код:
var keymap = {};
onkeydown = onkeyup = function(e){
keymap[e.keyCode] = e.type == 'keydown';
if(keymap[39] && keymap[32]){ // Right+Space
jumpRight();
}
if(keymap[37] && keymap[32]){ // Left+Space
jumpLeft();
}
if(keymap[32]){ // Space
jump();
}
if(keymap[39]){ // Right
right();
}
if(keymap[37]){ // Left
left();
}
}
Я использую Google Chrome, если это поможет.
Спасибо!
if (e.which === 39) ...
вместо этого. - person adeneo   schedule 10.10.2017h
удерживается, затем игрок нажимаетd
, теперь вы можете видеть, удерживается лиh
этим объектом. Это обычное дело в канвас-играх. Только для однократных ключевых реакций ваш метод достаточен и предпочтителен, поскольку он менее сложен, но не позволяет полностью отслеживать ключи. - person Feathercrown   schedule 10.10.2017if
, то это становится слишком длинным. Зачем использовать их, если вы можете обнаружить все ключи одной строкой? По сути, массив используется для хранения, что необходимо для решения этой проблемы (в вопросе) и многих других, таких как отслеживание удерживаемых клавиш, а стратегия не-if
короче и захватывает все ключи для размещения в массиве, что обеспечивает легкий доступ по коду клавиши без необходимости добавлять строку для каждой обнаруживаемой клавиши. Использование отдельных переменных с их собственнымиif
для хранения будет работать, но массив, опять же, намного проще в использовании. - person Feathercrown   schedule 10.10.2017