JavaScript を使用して、プレーヤーがアバターを 4 方向すべてに移動できるブラウザ ゲームを開発しています。
キーの同時押しを登録するために、イベントとイベントを観察し、keydown
押さkeyup
れたキーと離されたキーを追跡します。そうすれば、たとえば上向きカーソルと右向きカーソルを同時に押すと、アバターを斜め方向に移動できます。
Javascriptで、ユーザーが 2 つのキーを同時に押しているかどうかを確認するにはどうすればよいですか? このデモンストレーションでhttp://jsbin.com/iloxi。
ただし、そのソリューションには、デモでも再現できる欠陥があります。たとえば、カーソルを下に押してから、カーソルを右に押し始めます。ボックスが右下に移動します。カーソルを押したまま、カーソルを右に放します。箱の動きが止まる。起こるべきことは、ボックスが下に移動し続けることです。
問題は、カーソルを右に押すとすぐに、JavaScript がカーソル ダウン keydown
イベントの送信を停止することです。カーソルの右が解放されると、カーソルの下がまだ押されていることを知る方法はありません。
この問題の解決策はありますか?
更新:デモの問題は、ボックスがkeydown
またはkeyup
イベント リスナーのいずれかで移動されることです。ただし、2 番目のキーkeydown
が離されると、最初のキーのイベントは発生しなくなります。これに対する解決策があるのか、それともこれが標準の JavaScript の動作なのか疑問に思っています。
デモ コードを修正するにmove()
は、タイムアウトの繰り返しで関数を呼び出す必要があります ( window.setTimeout()
)。