我正在为两个玩家制作基于网络的赛车游戏,其中一匹马是使用箭头键控制的,另一匹是使用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()等函数仅具有用于根据按键事件更改马匹速度的代码。

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

最佳答案

使用这个jsFiddle key tracking code我似乎无法使它错过键捕获,可能是另一个元素正在捕获并防止事件冒泡,或者浏览器的动作不知所措(我更改了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;
      }
   };

关于javascript - 我的基于网络的JavaScript游戏对onkeyup事件不是很敏感。如何使程序检测所有的击键,而不仅仅是部分击键?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16923857/

10-12 07:22