2

我正在使用 JavaScript 开发一个浏览器游戏,玩家可以在其中向所有四个方向移动头像。

为了记录同时按下的按键,我观察keydownkeyup事件并跟踪按下和释放的按键。这样,如果同时按下光标向上向右光标,我可以沿对角线方向移动头像。

这与 StackOverflow 上的回复中的原理相同In Javascript,我如何判断用户是否同时按下两个键?通过此演示http://jsbin.com/iloxi

但是,该解决方案存在一个缺陷,也可以在演示中重现。例如按下光标下,然后也开始按下光标右。该框现在移动到右下角。现在释放光标右,同时仍然按下光标。盒子停止移动。应该发生的是盒子不断向下移动。

问题是一旦按下光标右,JavaScript 就会停止发送光标向下 事件。一旦光标右被释放,就无法知道光标向下仍然被按下。keydown

这个问题有解决方案吗?

更新:演示的问题是该框在keydownkeyup事件侦听器中移动。但是,一旦释放第二个键,就不会再keydown为第一个键触发事件。我想知道是否有解决方案,或者这是否是标准的 JavaScript 行为?

要修复演示代码,您必须move()在超时迭代 ( window.setTimeout()) 中调用该函数。

4

1 回答 1

1

也许我误解了你,但你不应该等待keyup光标向下的事件吗?即向下光标被按下,直到你得到keyup它 - 你不应该依赖keydown被发送的重复事件。

于 2011-01-25T15:24:36.633 回答