3

私はちょっとしたゲーム エンジンを書いているようなものです。これらが内部からどのように機能するかを純粋に理解するためです。私は現在、OpenGL や DirectX をいじりたくないので、GDI+ とそのすべての WinForms でコントロールを描画することに固執しています。

明らかに、入力を処理する必要があります。具体的には、キーボード イベントです。ただし、これには問題があります。

protected override void OnKeyDown(KeyEventArgs e)
{
    Trace.WriteLine(string.Format("KD {0:hh:MM:ss.fff} {1}", 
        DateTime.Now, e.KeyCode));
}

このコードは (コントロール パネルのキーボード アプレットで最小の繰り返し遅延を設定した場合でも)、次のようになります。

KD 10:02:18.318 Right
KD 10:02:18.570 Right
KD 10:02:18.598 Right
KD 10:02:18.639 Right
KD 10:02:18.667 Right
KD 10:02:18.701 Right

ご覧のとおり、0.25 秒あります。最初の 2 つのイベント間の遅延。これにより、画面上のオブジェクトの動きが鈍くなります。明らかに、最初はわずかに右に移動し、次に目に見える瞬間に一時停止してから続行します。

その問題を解決するにはどうすればよいですか? これは純粋な WinForms で実行できますか、それとも DirectInput (または最近のコーシャの方法は何ですか?) ルートに行く必要がありますか?

4

1 に答える 1

3

Windows メッセージを使用することは、入力操作に最適な方法ではありません。
私は WinForms については何も知りませんが、重要なイベントでメッセージを使用すると想定しています。

私は何年も前に DirectInput (v7) を使用しましたが、非常に高速でした。
おそらく、ゲーム ループ内のGetKeyboardStateまたはGetAsyncKeyStateが適切な代替手段です。

于 2010-02-26T08:06:44.167 に答える