1

私は自分でそれを理解しようとしていますが、オンラインのすべてのチュートリアルと私が見つけることができるすべてのものは、私の質問を実際に説明していないので、ここの誰かが私を助けてくれることを願っています.

これまでのところ、主に WPF を使用して C# のみを使用しており、キーボードでキーが押されたときにイベントを発生させたい場合は、単にKeyDownイベントを使用します。そこで、押されたキーを で簡単に識別できますe.Key

XNA で私が見たものはすべて、キーボードの状態を取得するために使用されており、たとえばtrue または false を返す場合は -methodKeyboardState state = Keyboard.GetState();を常にチェックインしています。Update()state.IsKeyDown(Keys.Left);

そして私の質問は、それは本当に非効率的ではありませんか? たとえば、私のゲームが入力に 15 個のキーを使用している場合、キーボードの状態を取得し、それらの 15 個のキーのすべてを 1 秒間に 30 回チェックします。XNA でこのアプローチを使用することが非常に一般的である理由はありますか? 私が考えることができる唯一の説明は、Update遅延イベントがゲームで問題を引き起こさないように、すべてが確実に実行されるように - メソッドに残っていることを確認することです。

4

1 に答える 1

3

フォーム アプリケーションとビデオ ゲームはまったく別物です。優れたビデオ ゲームでは、コードは使用可能なすべてのスレッドを使用します。このため、使用可能なスレッドがないときにイベントによって新しいスレッドが開始されることは、別の重要なスレッドがハングする可能性があるため、明らかに悪いことです。ゲームに糸のほつれはありません。

フォームは入力に反応します。あなたが何かをしていない間、それは事実上何もしません。フォームのボタンを押すと 0.2 ~ 0.5 秒の反応時間がかかっても、誰も気にしません。

ゲームは積極的であり、それらをチェックし続けます。とにかく、AI、物理、サウンド、FX、アニメーションなどのフレームごとに更新され、画面に表示されるものは常にユーザーの操作にリンクされます。コードがプレーヤーのアクションを更新するときは、常に入力を解決する必要があります。したがって、とにかくそれらをテストする必要があります。さらに、入力に対して可能な限り最高の反応時間を得る必要があり、それを行う唯一の方法は、それらを常にチェックすることです。ユーザー入力に 0.2 秒の遅延があると、ゲームをプレイできなくなる可能性があります。入力レイテンシを最小限に抑えることのみを目的とするコーダーがいます。

于 2012-11-03T10:42:48.997 に答える