我正在为两个玩家制作一款基于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;
}
};