让我们假设两个玩家只用一个键盘进行简单的乒乓球比赛。
移动处理程序看起来很简单:
document.addEventListener('keydown', function (event) {
if (event.keyCode === 87) { //w
movePaddle(leftPaddle, 0);
} else if (event.keyCode === 83) { //s
movePaddle(leftPaddle, 1);
} else if (event.keyCode === 38) { //arrow_up
movePaddle(rightPaddle, 0);
} else if (event.keyCode === 40) { //arrow_down
movePaddle(rightPaddle, 1);
}
});
movePaddle
函数中的第二个参数只表示方向(向上或向下)。
问题:如果同时按下W
和Up Arrow
,则只有一个拨片移动。这取决于最后按下哪个键。
如何正确处理keydown事件?
我需要两个拨片按下按键一起移动。如果W
和Up Arrow
,那么两者都会上升。如果W
和Down Arrow
,则向左上升,向右下降。当然,如果只按下一个键,则只能移动一个桨。
答案 0 :(得分:0)
https://gist.github.com/RepComm/52690eadaa9f4a3e7a7819b3267feca4
像这样使用它:(在任何类型的循环中,这个只使用动画框架)
Input.init();
var test = function () {
window.requestAnimationFrame(test);
if (Input.isKeyDown("w")) {
console.log("Forward March!");
}
}
window.requestAnimationFrame(test);
答案 1 :(得分:0)
尝试通过说出分隔键的方式
document.addEventListener('keydown', function (event) {
if (event.keyCode === 87) { //w
movePaddle(leftPaddle, 0);
} else if (event.keyCode === 83) { //s
movePaddle(leftPaddle, 1);
}
// Separate them here
if (event.keyCode === 38) { //arrow_up
movePaddle(rightPaddle, 0);
} else if (event.keyCode === 40) { //arrow_down
movePaddle(rightPaddle, 1);
}
});
之所以行之有效,是因为您要说的是,如果每一个都只能同时是真的,那么这就是其中之一。
我的意思是,在使用else if时,else if与if配对,并且与别的一样,在同一时间只能有一个块为真