1

Я пытаюсь разработать игру с использованием 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: Я подозреваю, что это сама клавиатура (или ОС), которая не может отправить эти события клавиатуры. Но я все еще ищу хороший способ подтвердить это.

+0

Запахи, как призрачные клавиатуры. Попробуйте запустить эту [онлайн-демонстрацию вкладок ваших клавиатур] (https://www.microsoft.com/appliedsciences/KeyboardGhostingDemo.mspx) и посмотреть, соответствует ли это результатам, которые вы получаете. – mucaho

+0

@mucaho, после проведения большего исследования я понял, что это было. Спасибо за ссылку. Хорошо быть в состоянии подтвердить мои подозрения. Если вы опубликуете свой комментарий в качестве ответа, я соглашусь с ним. – David

ответ

2

Как @David выяснил, вопрос называется keyboard ghosting:

«ореолы» проблема, что некоторые клавиши клавиатуры не работают, когда несколько клавиш нажаты одновременно. Говорят, что нажатия клавиш, которые не отображаются на компьютере или, кажется, исчезли, были «призрачными». На большинстве клавиатур, даже некоторых, которые явно продаются как «Anti-Ghosting», это происходит со многими тремя комбинациями клавиш. Представьте, что вы играете в свою любимую видеоигру и не можете, скажем, бегать по диагонали и одновременно стрелять в свое оружие (скажем, нажимать a, w и g одновременно). Это результат внутренней конструкции большинства существующих клавиатур ...

Поскольку у каждого потребителя нет игровой клавиатуры (что особенно не страдает от этой проблемы), я думаю, что единственное, что вы можете сделать, это для разработки вашей игры, не требующей нажатия трех или более клавиш одновременно.

 Смежные вопросы

  • Нет связанных вопросов^_^