0

我正在使用 HTML5 和 Javascript 开发一个小型敌机射击游戏。在游戏中,我使用 keypress 的 EventHandler 实现了射击飞机的子弹射击,然后我使用 setInterval 方法定期更改绘制子弹的画布的外观。所以在游戏中,当我上下移动飞机然后按下火键时,飞机停止移动(同时按下两个键)。

function move(e)
{
    if(e.keyCode==40)
    {
        //Move the jet down
    }
    else if(e.keyCode==38)
    {
        //Move the Jet Up
    }
    else if(e.keyCode==32)//Space Bar
    {
        //Fire the bullet
    }
}

因此,当我同时按下 SPACE 和 UP 键时,会发生空格键事件处理程序,但不会发生 UP 键并且飞机停止移动。有人可以帮助我如何让这两个事件同时发生,这样一个事件就不会阻止另一个事件的发生。

4

1 回答 1

1

就像布赖恩说的,你应该看看这个解决方案

要记住的另一件事是,您可能需要跟踪当前正在按下的所有键。话虽如此,如果您将move()函数移动到keyup事件中,您将测试您的跟踪数组,而不是刚刚释放的键的 e.keyCode。

例如

function move(e)
{
    if(keysDown[40])
    {
        //Move the jet down
    }
    else if(keysDown[38])
    {
        //Move the Jet Up
    }
    else if(keysDown[32])//Space Bar
    {
        //Fire the bullet
    }

    // RESET TRACKING WHEN KEY IS RELEASED
}

var keysDown = {};      // Tracking object

$("body").on('keydown', function(e) {
    keysDown[e.keyCode] = true;
});

$("body").on('keyup', function(e) {
    keysDown[e.keyCode] = false;
});

有了这样的东西,你必须move()从你的函数中调用你的setInterval函数。

于 2013-09-04T21:42:15.103 回答