推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
kokdemo

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

  •  
  •   kokdemo · Apr 8, 2015 · 5051 views
    This topic created in 4085 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    PS: 这个游戏是拳皇……

    5 replies    2015-04-09 09:59:05 +08:00
    chekun
        1
    chekun  
       Apr 8, 2015
    也许你需要的是这个 https://github.com/SimonWaldherr/konami.js
    jedihy
        2
    jedihy  
       Apr 8, 2015 via iPhone
    克拉克的指令投
    DolphinWood
        3
    DolphinWood  
       Apr 9, 2015
    把按键状态缓存下来,类似这样:

    ```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
        4
    kokdemo  
    OP
       Apr 9, 2015
    @DolphinWood
    @chekun 你发的那个konami.js 的思路就是三楼的思路,我觉得不错,晚上回来试试
    BoiledEgg
        5
    BoiledEgg  
       Apr 9, 2015
    可以借用underscore的debounce方法实现,做成某个延时内响应的按键都推迟该延时回调方法的调用,而这个回调方法的作用就是清除3楼提到的pressingStatus,这样避免按着不动然后再同时松开,也能简单的触发连招。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3281 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 12:11 · PVG 20:11 · LAX 05:11 · JFK 08:11
    ♥ Do have faith in what you're doing.