2

JavaScript を使用して、プレーヤーがアバターを 4 方向すべてに移動できるブラウザ ゲームを開発しています。

キーの同時押しを登録するために、イベントとイベントを観察し、keydown押さkeyupれたキーと離されたキーを追跡します。そうすれば、たとえば上向きカーソルと右向きカーソルを同時に押すと、アバターを斜め方向に移動できます。

Javascriptで、ユーザーが 2 つのキーを同時に押しているかどうかを確認するにはどうすればよいですか? このデモンストレーションでhttp://jsbin.com/iloxi

ただし、そのソリューションには、デモでも再現できる欠陥があります。たとえば、カーソルを下に押してから、カーソルを右に押し始めます。ボックスが右下に移動します。カーソルを押したまま、カーソルを右に放します。箱の動きが止まる。起こるべきことは、ボックスが下に移動し続けることです。

問題は、カーソルを右に押すとすぐに、JavaScript がカーソル ダウン keydownイベントの送信を停止することです。カーソルの右が解放されると、カーソルの下がまだ押されていることを知る方法はありませ

この問題の解決策はありますか?

更新:デモの問題は、ボックスがkeydownまたはkeyupイベント リスナーのいずれかで移動されることです。ただし、2 番目のキーkeydownが離されると、最初のキーのイベントは発生しなくなります。これに対する解決策があるのか​​、それともこれが標準の JavaScript の動作なのか疑問に思っています。

デモ コードを修正するにmove()は、タイムアウトの繰り返しで関数を呼び出す必要があります ( window.setTimeout())。

4

1 に答える 1

1

keyup誤解しているかもしれませんが、カーソル ダウンのイベントを待つべきではありませんか? つまり、カーソルが押されるまでカーソルが押されています。繰り返しイベントが送信さkeyupれることに依存するべきではありません。keydown

于 2011-01-25T15:24:36.633 に答える