在JavaScript游戏中同时处理WASD和Arrows

时间:2017-06-10 05:56:11

标签: javascript

让我们假设两个玩家只用一个键盘进行简单的乒乓球比赛。

移动处理程序看起来很简单:

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函数中的第二个参数只表示方向(向上或向下)。

问题:如果同时按下WUp Arrow,则只有一个拨片移动。这取决于最后按下哪个键。

如何正确处理keydown事件?

我需要两个拨片按下按键一起移动。如果WUp Arrow,那么两者都会上升。如果WDown Arrow,则向左上升,向右下降。当然,如果只按下一个键,则只能移动一个桨。

2 个答案:

答案 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配对,并且与别的一样,在同一时间只能有一个块为真