我正在使用JavaScript开发一款浏览器游戏,玩家可以在四个方向上移动虚拟形象。
为了同时按下按键,我会观察keydown
和keyup
事件,并跟踪按下和释放的按键。这样我可以按对角线方向移动头像,例如同时按向上光标和向右光标。
这与使用此演示In Javascript, how do I tell if a user is pressing two keys at the same time?的StackOverflow http://jsbin.com/iloxi的回复相同。
然而,该解决方案存在一个缺陷,也可以在演示中重现。例如,按向下光标,然后也开始按光标向右。盒子现在向右下方移动。现在,在按下光标的同时释放光标右侧。盒子停止移动。应该发生的是盒子一直在向下移动。
问题是,只要按下光标右侧,JavaScript就会停止向向下发送 keydown
个事件。一旦右移,就无法知道向下光标仍在被按下。
这个问题有解决方法吗?
更新:演示的问题是该框在keydown
或keyup
事件侦听器中移动。但是,一旦释放第二个密钥,就不会再为第一个密钥触发keydown
个事件。我想知道是否有解决方案,或者这是标准的JavaScript行为?
要修复演示代码,您必须在超时迭代(move()
)中调用window.setTimeout()
函数。
答案 0 :(得分:1)
也许我误解了你,但是你不应该等待光标下的keyup
事件吗?即按下光标直到你得到keyup
为止 - 你不应该依赖发送的重复keydown
事件。