Я пытаюсь разработать игру с использованием CraftyJS. Я используюПочему CraftyJS/Chrome ограничивает количество одновременных событий нажатия клавиш?
- Лукавый 0.7.1
- Chrome 50.0.2661.94
- Windows 10
- 2016 Dell XPS15.
Я замечаю некоторые странности в том, как обрабатываются события клавиатуры. Я предполагаю, что это связано с Chrome или, может быть, даже с моей физической клавиатурой, и что Crafty имеет значение только в том, что я , используя его API.
Во-первых, вот мой SSCCE. Этот код добавляет ключ к массиву ключей, когда он нажимается, удаляет его, когда он выпущен, и выводит массив каждый раз.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>keyTest</title>
<script src="../crafty.js"></script>
<script>
window.onload = function(){
Crafty.init(window.innerWidth, window.innerHeight, document.getElementById('game'));
var keys = [];
var keyDown = function(e){
console.log("KeyDown " + e.key);
keys.push(e.key);
};
var keyUp = function(e){
console.log("KeyUp " + e.key);
keys.splice(keys.indexOf(e.key), 1);
};
Crafty.e("Keyboard").bind("KeyUp", keyUp).bind("KeyDown", keyDown);
Crafty.e("Delay").delay(function(){console.log(keys)}, 1000, -1);
};
</script>
</head>
<body>
<div id="game"></div>
</body>
</html>
Я заметил некоторое странное поведение:
Во-первых, это выглядит как лукавый будет распознавать только четыре буквы ключа прессы сразу же, если они не могут быть набраны как правый и левый рука. Например, удерживание ASDFE сразу приводит к:
[65, 83, 68, 70]
Ключ E остается нераспознанным, независимо от того, насколько я нахожусь на нем. Но, если, например, я удерживаю ASDFJKL, то вижу:[65, 83, 68, 70, 74, 75, 76]
.Только две клавиши со стрелками будут распознаны сразу, если третий не будет стрелкой вниз. Например, нажатие влево, вверх, вправо результаты в:
[37, 38]
Но влево вниз правильные результаты в:[37, 39, 40]
Что на земле с этим? Я предполагаю, что кто-то между моими пальцами и моим JS пытается искусно исправить ошибки при нажатии (опечатки), но я не знаю, кто, и я не знаю, какие правила регулируют это.
EDIT: Я подозреваю, что это сама клавиатура (или ОС), которая не может отправить эти события клавиатуры. Но я все еще ищу хороший способ подтвердить это.
Запахи, как призрачные клавиатуры. Попробуйте запустить эту [онлайн-демонстрацию вкладок ваших клавиатур] (https://www.microsoft.com/appliedsciences/KeyboardGhostingDemo.mspx) и посмотреть, соответствует ли это результатам, которые вы получаете. – mucaho
@mucaho, после проведения большего исследования я понял, что это было. Спасибо за ссылку. Хорошо быть в состоянии подтвердить мои подозрения. Если вы опубликуете свой комментарий в качестве ответа, я соглашусь с ним. – David