【发布时间】:2011-01-25 14:11:26
【问题描述】:
我正在使用 JavaScript 开发一个浏览器游戏,玩家可以在其中向所有四个方向移动头像。
为了记录同时按下的按键,我观察keydown 和keyup 事件并跟踪按下和释放的按键。这样,如果同时按下 cursor up 和 cursor right,我可以沿对角线方向移动头像。
这与 StackOverflow In Javascript, how do I tell if a user is pressing two keys at the same time? 上的回复与此演示 http://jsbin.com/iloxi 的原理相同。
但是,该解决方案存在一个缺陷,也可以在演示中重现。例如按下 cursor down,然后也开始按下 cursor right。该框现在移动到右下角。现在释放向右光标,同时按住向下光标。盒子停止移动。应该发生的是盒子一直向下移动。
问题是 JavaScript 停止发送 cursor down keydown 事件,只要 cursor right 被按下。一旦 向右光标 被释放,就无法知道 向下光标 仍然被按下。
这个问题有解决办法吗?
更新: 演示的问题是该框在keydown 或keyup 事件侦听器中移动。但是,一旦释放第二个键,就不会再为第一个键触发 keydown 事件。我想知道是否有解决方案,或者这是否是标准的 JavaScript 行为?
要修复演示代码,您必须在超时迭代 (window.setTimeout()) 中调用 move() 函数。
【问题讨论】:
标签: javascript events keypress key simultaneous