Javascript 游戏输入失去焦点

Javascript game input loses focus

所以,我正在编写一个将使用键盘输入的游戏。我跟踪类似于此处的 KeyDown 和 KeyUp 事件:

http://nokarma.org/2011/02/27/javascript-game-development-keyboard-input/index.html

但是,有些用例可能会错过 Keyup/Keydown 事件。我尝试为我的 body 元素添加模糊,但在某些用例中它不会模糊。我能给出的最简单的例子是,如果用户右键单击文档外部的区域,比如书签,浏览器不会向 DOM 提供任何事件,并且上下文菜单开始获取键盘输入。因此,如果用户在按住向上箭头的同时仍然按住向上箭头,右键单击书签,然后释放箭头键,则永远不会向浏览器提供相应的 KeyUp 事件。如果用户再次按下该键,则该键将 'reset',但这仍然是一个错误。

对于 Chrome 和 Firefox,我可以使用 PointerLock API,但我想知道是否还有其他我可以做的事情。我想过如果鼠标离开客户区会自动模糊,但是当我玩游戏时我通常将鼠标移到底角。 AFAIK 无法手动轮询键盘。是否有任何我遗漏的解决方法?

我不确定这是否有帮助,但在您的实现中,在 keydown 方法上更改某处的变量以指示它已被按下。

另外 运行 一个定时器,每隔 x 毫秒将值重置为未按下(如果它仍然被按下,keydown 方法应该在同一个更新中触发)

然后在 keyup 方法上将变量更改为未按下。

如果按下按钮,这应该会给出更可靠的指示,我之前在 java 游戏中使用了一个模拟方法,效果非常好!