我正在使用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键,并且飞机停止移动。有人可以帮助我如何保持两个事件并行,以便一个人不会阻止另一个事件发生。
答案 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
功能。