为什么我的键盘输入未注册?

时间:2018-07-03 10:20:29

标签: javascript keyboard-events event-listener

我正在使用HTML和javascript制作Snake游戏。 游戏通过按箭头键移动蛇来工作。 90%的时间都可以正常工作。但是,有时当我非常快速地输入2个键时,仅注册了一个键。例如,如果我以<10ms的延迟按下向上和向左按钮,则蛇只会向上而不向左移动。

我不确定为什么会这样,所以我不知道从哪里开始修复。

我的事件监听器:

window.onkeydown = function (e){
  var keys = {
    37: 'left',
    38: 'up',
    39: 'right',
    40: 'down'
  }
  var dx = 0;
  var dy = 0;

  switch (keys[e.keyCode]){
    case 'left':
      dx = -1;
      break;
    case 'up':
      dy = 1;
      break;
    case 'down':
      dy = -1;
      break;
    case 'right':
      dx = 1;
      break;
    default:
      return;
  }

是否可以通过将其更改为addEventListener来解决我的问题?

我的另一种理论是浏览器认为我正在同时输入2个键,因此我必须对其进行编码以使输入排队。

还是Javascript在执行逻辑时不读取输入?

有人可以给我一个提示吗?

0 个答案:

没有答案