Javascript 如何在游戏中处理不同对象的多个按键?

Javascript 如何在游戏中处理不同对象的多个按键?,javascript,events,keypress,Javascript,Events,Keypress,我正在尝试重新创建一个密钥,目前被困在多个密钥处理程序中 目前的解决方案存在的问题是,浏览器似乎无法处理多个按键输入,这就是为什么我无法足够平滑地移动两个拨片的原因 我处理密钥输入的方式如下所示: document.addEventListener("keydown", keyDownHandler, false); document.addEventListener("keyup", keyUpHandler, false); function keyDownHandle

我正在尝试重新创建一个密钥,目前被困在多个密钥处理程序中

目前的解决方案存在的问题是,浏览器似乎无法处理多个按键输入,这就是为什么我无法足够平滑地移动两个拨片的原因

我处理密钥输入的方式如下所示:

   document.addEventListener("keydown", keyDownHandler, false);
   document.addEventListener("keyup", keyUpHandler, false);

    function keyDownHandler(e) {
        if(e.keyCode == 40) {
            DownArrowPressed = true;
            console.log('down pressed')
        }
        else if(e.keyCode == 38) {
            UpArrowPressed = true;
            console.log('up pressed')
        }
        else if(e.keyCode == 68) {
            Dpressed = true;
            console.log('d pressed')
        }
        else if(e.keyCode == 67) {   
            Cpressed = true;
            console.log('c pressed')
        }
    }

    function keyUpHandler(e) {
        if(e.keyCode == 40) {
            DownArrowPressed = false;
        }
        else if(e.keyCode == 38) {
            UpArrowPressed = false;
        }
         else if(e.keyCode == 68) {
            Dpressed = false;

        }
        else if(e.keyCode == 67) {
            Cpressed = false;

        }

    }
另外,我一直在浏览stackoverflow,发现这个线程:

更新:使用上述线程的代码:

> document.addEventListener("Down", onkeydown, false);
document.addEventListener("up", onkeyup, false);

var map = []; // Or you could call it "key"
onkeydown = onkeyup = function(e){
    e = e || event; // to deal with IE
    map[e.keyCode] = e.type == 'keydown';

    // D + up arrow
    if (map[68] && map["38"]) {
        Dpressed = true;
        UpArrowPressed = true;
    }

    // D + down arrow
    else if (map[68] && map["40"]) {

        Dpressed = true;
        DownArrowPressed = true; 


    }
    // C + up arrow
    else if (map[67] && map[38]) {
        Cpressed = true;
        UpArrowPressed = true;
    }
    // C + down arrow
    else if (map[67] && map[40]) {
        Cpressed = true;
        DownArrowPressed = true;
    }

    // Down arrow
    else if(map[40]) {
        DownArrowPressed = true;

    }
    // Up arrow
    else if(map[38]) {
        UpArrowPressed = true;

    }
    // D 
    else if(map[68]) {
        Dpressed = true;

    }
    // C
    else if( map[67]) {
        Cpressed = true;

    }


}

使用此代码时,挡板不会平稳移动并卡在画布底部。我觉得在我的实现中有错误,但我看不到它们-\u-

链接的问题显示了解决方法。你说的似乎只对一个对象有效是什么意思?向我们展示不起作用的代码..嗨,阿玛丹,很抱歉,一个对象的问题来自不同的线程,我把它们弄混了,我的错:嗨,人造丝,用不起作用的代码更新了线程。感谢您的提示:X onkeyup和onkeydown应该只包含前两行,这样地图在任何时候都包含当前的键盘情况。如果映射[68]。。。应该在游戏中勾选setInterval或setTimeout。还要注意的是,如果你想提醒某人,可以这样写他们的名字:@Amadan;默认情况下,只有问题所有者和答案所有者得到通知,如果我没有故意回到历史中重温我的旧评论,我就不会阅读您的更新。