1

我正在为两名玩家制作一个基于网络的赛马游戏,其中一匹马使用箭头键控制,另一匹马使用 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% 的击键(大约),即使只有一名玩家在玩(它与同时击键无关)。

4

1 回答 1

0

使用这个 jsFiddle键跟踪代码我似乎无法让它错过关键捕获,可能是另一个元素正在捕获并防止事件冒泡,或者浏览器可能被动作淹没(我更改了 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;
      }
   };
于 2013-06-04T18:56:00.203 回答