这两天在研究按键的捕获,实用的场景是这样的:
某格斗游戏,有一个招式是 ↓↘→D 现在需要打出这个斜的按键。我用的是wasd来模拟的方向键。
于是先考虑记录两次按键的间隔,如果按下s和d的间隔足够小,就认为是一个斜向按键,于是这个招式只按了s和d两次,就发出三个方向。
然后后面又有一个招式是 ↘D ……
所以问题来自于记录不了同时按键的时候按下的状态,只能捕捉到按下的动作。有什么方法可以解决这个问题么?
PS: 这个游戏是拳皇……
1
chekun 2015-04-08 22:18:02 +08:00
|
2
jedihy 2015-04-08 23:20:55 +08:00 via iPhone
克拉克的指令投
|
3
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; } ``` |
4
kokdemo OP |
5
BoiledEgg 2015-04-09 09:59:05 +08:00
可以借用underscore的debounce方法实现,做成某个延时内响应的按键都推迟该延时回调方法的调用,而这个回调方法的作用就是清除3楼提到的pressingStatus,这样避免按着不动然后再同时松开,也能简单的触发连招。
|