0

矢印キー入力をキャプチャして登録するためのシステムを用意しています。それはある時点まで機能します。2 つ以下のキーが同時に押された場合、正しく登録されます。3 番目または 4 番目が同時に押されると、キーダウン イベントの発生が停止します。この jsFiddleを参照して、コンソールの出力を表示してください。

ブラウザによって設定された制限ですか、それとも私のコードが間違っていますか? どんな助けでも大歓迎です。

コードは次のとおりです。

var keysPressed = {
    37: false,
    38: false,
    39: false,
    40: false
};
var LEFT = 'left';
var RIGHT = 'right';
var UP = 'up';
var DOWN = 'down';
var ON = '_on';
var OFF = '_off'

document.addEventListener('keydown', function(evt){
    var keycode = evt.keyCode;
    if(!checkKeyPressed(keycode)){
        keysPressed[keycode] = true;
        switch(keycode){
            case 37: 
                registerInput(LEFT+ON);
                break;
            case 38:
                registerInput(UP+ON);
                break;
            case 39:
                registerInput(RIGHT+ON);
                break;
            case 40:
                registerInput(DOWN+ON);
                break;
            default:
                break;
        }
    }
});

document.addEventListener('keyup', function(evt){
    var keycode = evt.keyCode;
    if(checkKeyPressed(keycode)){
        keysPressed[keycode] = false;
        switch(keycode){
            case 37: 
                registerInput(LEFT+OFF);
                break;
            case 38:
                registerInput(UP+OFF);
                break;
            case 39:
                registerInput(RIGHT+OFF);
                break;
            case 40:
                registerInput(DOWN+OFF);
                break;
            default:
                break;
        }
    }
});

function checkKeyPressed(keycode){
    if (keysPressed === null) {
        return false;
    } else return keysPressed[keycode];
}

function registerInput(inputType){
    console.log(keysPressed);
    //Game.Engine.playerInput(inputType);
}
4

1 に答える 1

2

これは必ずしも私が実装した方法ではありませんが、実装はうまく機能すると思います。

次の点に注意してください。

キーボードが異なれば、キーのバスも異なります。
高品質のキーボードでは、一度に保持できるキーボードの「領域」ごとにより多くのキーを取得できます...
ただし、キーボードが何であるか、キーがどのように印刷されているか、領域がどのように分割されているかなどによっては、一度に任意の場所で使用できるキーの数が多かれ少なかれます。

たとえば、FPS ゲームや同様のアクション ゲームをプレイするとき、通常のマッピングでは、キーボードでしゃがんだり、前方 + 左に移動したり、リーダーボードを引き上げたり、同時にリロードしたりすることはできません。

私が最後に何をしても無視されます。

于 2013-03-27T21:11:52.347 に答える