我找到了类似的线程,但他们只谈到删除初始延迟,而不是设置延迟。
我有一个游戏,如果按下了wasd,则相应地移动用户并将它们移动到下一个网格坐标。然而,如果用户按下任何一个按键,他们几乎立即射击,我宁愿没有。我试图在机芯中产生一个延迟,如果你快速点击键但是如果按下则不行。我有以下代码:
window.addEventListener("keydown", onKeyDown, false);
function onKeyDown(event) {
var keyCode = event.keyCode;
if (canMove == true) {
switch (keyCode) {
case 68: //d
keyD = true;
canMove = false;
break;
case 83: //s
keyS = true;
canMove = false;
break;
case 65: //a
keyA = true;
canMove = false;
break;
case 87: //w
keyW = true;
canMove = false;
break;
}
setTimeout(function(){canMove = true;}, 400);
}
checkMovement();
}
我的问题:我可以按“a”为例,几乎可以立即放大地图。我希望他们是一个延迟,比如200-500毫秒,这样他们就会以稳定的慢速移动。如何解决这个问题?
答案 0 :(得分:3)
这是一个使用每250毫秒一次最大键重复率的小型演示。
单击运行代码段按钮,单击空白区域以使其聚焦,然后按 W A 键盘上的kbd> S D
window.addEventListener("keydown", (function(canMove) {
return function(event) {
if (!canMove) return false;
canMove = false;
setTimeout(function() { canMove = true; }, 250);
switch (event.keyCode) {
case 68: return move("right");
case 83: return move("down");
case 65: return move("left");
case 87: return move("up");
}
};
})(true), false);
function move(direction) {
console.log("move: %s", direction);
}

答案 1 :(得分:0)
var moveListener = null;
window.addEventListener("keydown", onKeyDown, false);
window.addEventListener("keyup", onKeyUp, false);
function onKeyDown(event) {
var keyCode = event.keyCode;
//prevent reseting event listener on hold down also will prevent up,left diagonal type movement
if (moveListener === null) {
moveListener = setInterval(move(keyCode),400);
}
}
function onKeyUp (event){
clearInterval(moveListener);
moveListener = null;
}
function move (direction){
//move code here
}
没有测试过,但你得到了一般的想法。
答案 2 :(得分:-1)
你可以尝试
window.addEventListener("keydown",
setTimeout(function(){
onKeyDown()
}, 5000)
, false);
答案 3 :(得分:-1)
function onKeyDown(event) {
var keyCode = event.keyCode;
if (canMove == true) {
setTimeout(function () {
switch (keyCode) {
case 68: //d
keyD = true;
canMove = false;
break;
case 83: //s
keyS = true;
canMove = false;
break;
case 65: //a
keyA = true;
canMove = false;
break;
case 87: //w
keyW = true;
canMove = false;
break;
}
}, 400);
}
checkMovement();
}
试试这个: