Javascript中的异步Keypress EventHandler

时间:2013-09-04 18:30:39

标签: javascript jquery html5

我正在使用HTML5和Javascript开发一个小型敌机射击游戏。在游戏中,我使用按键的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键,并且飞机停止移动。有人可以帮助我如何保持两个事件并行,以便一个人不会阻止另一个事件发生。

1 个答案:

答案 0 :(得分:1)

像布莱恩所说,你应该看看this solution

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

e.g。

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功能。