js 有没有办法捕获同时按下的两个按键?

2015-04-08 22:15:19 +08:00
 kokdemo

这两天在研究按键的捕获,实用的场景是这样的:

某格斗游戏,有一个招式是 ↓↘→D 现在需要打出这个斜的按键。我用的是wasd来模拟的方向键。

于是先考虑记录两次按键的间隔,如果按下s和d的间隔足够小,就认为是一个斜向按键,于是这个招式只按了s和d两次,就发出三个方向。

然后后面又有一个招式是 ↘D ……

所以问题来自于记录不了同时按键的时候按下的状态,只能捕捉到按下的动作。有什么方法可以解决这个问题么?

PS: 这个游戏是拳皇……

4249 次点击
所在节点    JavaScript
5 条回复
chekun
2015-04-08 22:18:02 +08:00
也许你需要的是这个 https://github.com/SimonWaldherr/konami.js
jedihy
2015-04-08 23:20:55 +08:00
克拉克的指令投
DolphinWood
2015-04-09 01:09:45 +08:00
把按键状态缓存下来,类似这样:

```javascript
var pressingStatus = {};

elem.onkeydown = function (e) {
pressingStatus[e.keyCode] = true;

if (pressingStatus[keyA] && pressingStatus[keyB] && ...) {
// do something
}
};

elem.onkeyup = function (e) {
pressingStatus[e.keyCode] = false;
}
```
kokdemo
2015-04-09 08:24:14 +08:00
@DolphinWood
@chekun 你发的那个konami.js 的思路就是三楼的思路,我觉得不错,晚上回来试试
BoiledEgg
2015-04-09 09:59:05 +08:00
可以借用underscore的debounce方法实现,做成某个延时内响应的按键都推迟该延时回调方法的调用,而这个回调方法的作用就是清除3楼提到的pressingStatus,这样避免按着不动然后再同时松开,也能简单的触发连招。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/182418

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX