Javascript 将键码映射到一起

Javascript 将键码映射到一起,javascript,Javascript,我增加了使用箭头键和WASD键来控制游戏中玩家移动的功能。目前,我在游戏逻辑中同时检查W和向上箭头、S和向下箭头(等等) const controls = { 87: false, // W 83: false, // S 68: false, // D 65: false, // A 38: false, // Arrow up 40: false, // Arrow down 39: false, // Arrow right

我增加了使用箭头键和WASD键来控制游戏中玩家移动的功能。目前,我在游戏逻辑中同时检查
W
向上箭头
S
向下箭头
(等等)

const controls = {
    87: false, // W
    83: false, // S
    68: false, // D
    65: false, // A
    38: false, // Arrow up
    40: false, // Arrow down
    39: false, // Arrow right
    37: false, // Arrow left
};

document.body.addEventListener('keyup', keyUp, false);
document.body.addEventListener('keydown', keyDown, false);

function keyUp(event) {
    controls[event.keyCode] = false;
}

function keyDown(event) {
    controls[event.keyCode] = true;
}
有没有办法将箭头键映射到WASD键,而不是同时冗余地检查两个

例子:从这个

if (controls[87] || controls[38]) { }

if (controls[83] || controls[40]) { }

if (controls[68] || controls[39]) { }

if (controls[65] || controls[37]) { }
……为此:

if (controls[87] || controls[38]) { }

不,W和向上箭头等都没有一个键码

您可以创建如下函数:

if (controls[87]) { }
然后就叫它:

function isKeyCodeUp(keyCode) {
    return keyCode === controls[87] || keyCode === controls[38];
}
解决此问题的另一个装饰器:

if (isKeyCodeUp(event.keyCode)) {


您可以这样考虑创建一个对象:const controls={'87 | 38':false,//W'83 | 40':false,//S'68 | 39':false,//D'65 | 37':false,//a};函数调用作为一个额外的步骤,这不或多或少是一样的吗。你的问题没有其他解决办法。再举一个例子,你认为这是一个坏的解决方案吗?对这导致了困惑“如果我划38,为什么数字是87”。我找到了一个更好的解决方案,但我接受你的答案,因为你看起来是个不错的小伙子。
if ([87,38].includes(event.keyCode)) {
const KEYCODE_UP = [87,38];
if (KEYCODE_UP.includes(event.keyCode)) {