我已经在网上搜索了这个答案。如果它被埋在一个StackOverflow答案的某处,我很抱歉。在二维画布中沿对角线移动JavaScript游戏
我正在做一个2d canvas JavaScript游戏。
我正在处理带有onkeydown和onkeyup事件的箭头键输入。
我将此输入存储在名为Keys的对象中。
var Keys = {
up: false,
down: false,
left: false,
right: false
};
这是我的事件处理程序是这样的:
window.onkeydown = function(e){
var kc = e.keyCode;
e.preventDefault();
if(kc === 37) Keys.left = true;
else if(kc === 38) Keys.up = true;
else if(kc === 39) Keys.right = true;
else if(kc === 40) Keys.down = true;
move();
};
window.onkeyup = function(e){
var kc = e.keyCode;
e.preventDefault();
if(kc === 37) Keys.left = false;
else if(kc === 38) Keys.up = false;
else if(kc === 39) Keys.right = false;
else if(kc === 40) Keys.down = false;
};
然后每个keydown事件发生时,我打电话给我的举动()函数:
var move = function(){
if(Keys.up){
hero.y -= 10;
}
else if(Keys.down){
hero.y += 10;
}
if(Keys.left){
hero.x -= 10;
}
else if(Keys.right){
hero.x += 10;
}
main();
}
此举()函数调用我的main()函数,它只是再次绘制地图。 我试图避免循环游戏,而是每次玩家移动时更新地图。
所以我的问题出现,当我尝试对角线移动。我能够做到这一点,但是一旦我释放第二个按键,我的角色就会停止。
例如: 右键按下,然后向上按键,字符向东北方向移动。 向上键释放,玩家停止。
但是,如果我释放右键,角色会继续向上移动。
另一个小故障是当我左右按住时,角色会左移, 但我希望它停止移动。
请请,请帮助我我疯了。谢谢!
如果您将'move();'添加到'window.onkeyup'函数的底部,它会改进吗? – thelastshadow
不,我认为这样做可以工作,但:/ –