1

イーゼルjsとjQueryでゲームを作っています。複数の押されたキーを同時に処理したいと思います。1 つのキーに対して次のようなコードがあります。

$(document).keydown(function(e){
if (e.keyCode == 37) { 
   angle=angle+1;

}
if (e.keyCode == 40) { 
   rad=angle*Math.PI/180;
   charachter.x=charachter.x-speed*Math.cos(rad);
   charachter.y=charachter.y-speed*Math.sin(rad);

   stage.update();
}
if (e.keyCode == 39) { 
   angle=angle-1;


}
if (e.keyCode == 38) { 
   rad=angle*Math.PI/180;
   charachter.x=charachter.x+speed*Math.cos(rad);
   charachter.y=charachter.y+speed*Math.sin(rad);

   stage.update();
}

});

しかし、回転と前進を同時に行うにはどうすればよいでしょうか。

4

2 に答える 2

1

探しているイベントは両方とも、そのリスナー内で発生します。キーが押された後も引き続き実行されるアクションを作成する場合は、そのアクションをループ内で実行し、イベント リスナーでアクティブ化する必要があります。たとえば....

$(document).keydown(function(e){
    if (e.keyCode == 40) { 
       turn = true;
    }
    if (e.keyCode == 38) { 
       move = true;
    }
});

setTimeout(function() {
    if(turn) {
       // turn
    }
    if(move) {
      // move
    }
}, 1000 / 24);

次に、それらのキーがキーアップ リスナーで上昇するのをリッスンし、turn/move を false に設定します。

于 2012-07-18T20:59:32.913 に答える
0

私の知る限り、あなたはあなたが望むことをすることができません。同時に押すことができる唯一のキーは、ctrlshift、およびaltです。

$(document).keydown(function(e){
    var ctrl = e.ctrlKey,
    shift = e.shiftKey,
    alt = e.altKey,
    altGr = e.altGraphKey,
    code = e.keycode || e.which;    
    if(code==='65' && ctrl){
        //Ctrl+A
    }
    if(code==='65' && shift){
        //Shift+A
    }
    if(code==='65' && alt){
        //Alt+A
    }
    if(code==='65' && altGr){
        //AltGr+A
    }
});

ただし、この例がすべての主要なブラウザで機能するかどうかはわかりません(Chrome、Firefox、Safari、そしておそらくOperaとIEで機能します)。

もう1つの方法は、@ MrOBrianが言ったことを実行し、押されたキーを配列に保存することです。

var keys = [];
$(document).keydown(function(e){
    var key = e.keyCode || e.which;
    if(keys.indexOf(key)===-1)
        keys.push(key);
    if(keys[0]===65 && keys[0]===66){
        //A and B pressed, respectively
    }
    if(keys.indexOf(67)!==-1 && keys.indexOf(68)!==-1){
        //C and D pressed, the order doesn't matter
    }
});
$(document).keyup(function(){
    keys = [];
});

このように、キーを押すたびに、そのキーはkeys配列に保存され(すでに保存されている場合を除く)、プログラムは押されたキーをチェックし、最後に、ユーザーが「マウスを押す」と、配列は次のようになります。リセットされます。

注:押されたキーがそれぞれABであると仮定しましょう。これらがこの順序で押されたかどうかを確認する場合は、次の条件を使用する必要があります。

if(keys[0]===65 && keys[0]===66){
    //A and B pressed, respectively
}

ただし、それらが押されたかどうかを確認したいだけで、順序が重要でない場合は、keys次の条件で、それらが配列内にあるかどうかを確認する必要があります。

if(keys.indexOf(65)!==-1 && keys.indexOf(66)!==-1){
    //A and B pressed, the order doesn't matter
}
于 2012-07-18T20:56:34.653 に答える