我遇到了在keydown事件上从光标键获取输入的问题。我正在同时使用空格键和箭头keydown事件的keydown事件(在spaceinvaders游戏中,你应该能够同时移动并通过空格键触发)。
当按下空格键时,船应该能够同时沿x轴和y轴移动。现在的实际问题是:每当按下空格键时,我都可以向上和向前移动,但不能向前和向下移动。我也可以向后和向下移动,但不能倒退。当没有按下空格键时,它可以工作,我可以对角移动。这同样适用于wasd键。
if (e.keyCode == 37 || e.keyCode == 38 || e.keyCode == 39 || e.keyCode == 40)
e.preventDefault();
if (e.keyCode == 32){
e.preventDefault();
spaceState = true;
}
if (e.keyCode == 87 || e.keyCode == 38) keyState["UpDown"]="w";//w
if (e.keyCode == 83 || e.keyCode == 40) keyState["UpDown"]="s";//s
if (e.keyCode == 65 || e.keyCode == 37) keyState["RightLeft"]="a";//a
if (e.keyCode == 68 || e.keyCode == 39) keyState["RightLeft"]="d"; //d
组合w和d有效 组合和作品
w,a和s,d DONT工作
当没有按空格键时,所有组合仍然有效,即使空格键返回keydown事件,也可以使用组合。问题只是为什么?
答案 0 :(得分:1)
我最近回答了very similar question,所以我只想从那里复制我的答案。
这可能与您的代码无关。为节省成本,许多键盘不能同时支持3个或更多键的每个组合,并且专门用于支持常用的组合(例如Ctrl + Alt + Del)。这种现象被称为“重影”。
有关详细说明,请参阅this page from Microsoft。