我正在使用 JavaScript 开发一个浏览器游戏,玩家可以在其中向所有四个方向移动头像。
为了记录同时按下的按键,我观察keydown
和keyup
事件并跟踪按下和释放的按键。这样,如果同时按下光标向上和向右光标,我可以沿对角线方向移动头像。
这与 StackOverflow 上的回复中的原理相同In Javascript,我如何判断用户是否同时按下两个键?通过此演示http://jsbin.com/iloxi。
但是,该解决方案存在一个缺陷,也可以在演示中重现。例如按下光标下,然后也开始按下光标右。该框现在移动到右下角。现在释放光标右,同时仍然按下光标。盒子停止移动。应该发生的是盒子不断向下移动。
问题是一旦按下光标右,JavaScript 就会停止发送光标向下 事件。一旦光标右被释放,就无法知道光标向下仍然被按下。keydown
这个问题有解决方案吗?
更新:演示的问题是该框在keydown
或keyup
事件侦听器中移动。但是,一旦释放第二个键,就不会再keydown
为第一个键触发事件。我想知道是否有解决方案,或者这是否是标准的 JavaScript 行为?
要修复演示代码,您必须move()
在超时迭代 ( window.setTimeout()
) 中调用该函数。