我正在为两个玩家制作基于网络的赛车游戏,其中一匹马是使用箭头键控制的,另一匹是使用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/