我的基于web的javascript游戏对onkeyup事件不是很敏感.我如何使程序检测所有的击键,而不仅仅是其中的一些

My web-based javascript game is not very sensitive to onkeyup events. How can I make the program detect all keystrokes and not just some of them?

本文关键字:检测 何使 程序 不仅仅是 游戏 javascript web onkeyup 事件 我的      更新时间:2023-09-26

我正在为两个玩家制作一款基于web的赛马游戏,其中一匹马使用箭头键控制,另一匹使用asdw键控制。我使用html和javascript。我的问题是,该程序似乎只检测按键事件的一些时间(约65%的时间),所以游戏不是很响应击键。我的代码如下:

我的相关html代码是:

<body onkeyup="steer(event)" onload = "init()">

我的相关javascript是:

function init(){
    ...code that counts 3,2,1,go!...
    setTimeout(function(){doMove();}, 3000);
}
function steer(event){
    key = (event.keyCode);
    if(key == 38) up();
    if(key == 40) dn();
    if(key == 37) lt();
    if(key == 39) rt();
    if(key == 87) up2();
    if(key == 83) dn2();
    if(key == 65) lt2();
    if(key == 68) rt2();
  }
}
function doMove(){
    ...code for moving the horses...
    setTimeout(doMove, 5);

}

up()、dn()等。函数只是有代码来改变马的速度基于keyup事件。

程序只检测65%的击键(大约),即使只有一个玩家在玩(它与同时击键无关)。

使用这个jsFiddlekey跟踪代码,我似乎不能让它错过一个键捕获,这可能是另一个元素正在捕获和防止事件上的气泡,或者也许浏览器正在被运动淹没(我将settimeout更改为setinterval,这应该更容易对客户端)。

我还将其更改为使用开关,以及不需要使用shift键的键代码

   var steer = function (event) {
   var key = (event.keyCode || event.which);
   switch (key) {
       case 73:
           up();
           break;
       case 75:
           dn();
           break;
       case 74:
           lt();
           break;
       case 76:
           rt();
           break;
       case 87:
           up2();
           break;
       case 83:
           dn2();
           break;
       case 65:
           lt2();
           break;
       case 68:
           rt2();
           break;
      }
   };