1

私のシナリオをできる限り説明しようと思います。

アプリケーションのティックごとに、キーボードとマウスの現在の状態を照会し、それらを個々のクラスとデータ構造にラップします。キーボードの場合はKeys列挙型 (現在押されているキーごとに 1 つの項目) の配列であり、マウスの場合は、押された各ボタンの座標デルタとブール値を含むクラスです。

また、スタックを維持し、状態をマーシャリングする状態マネージャー クラスを介して管理される基本的な状態マシンもあります。

私が知りたいのは、入力 (スナップショット) をアプリがいつでもできる個々の状態に渡すのに最適な方法です。

状態内のロジックの繰り返しを減らすために、個々の状態からできるだけ多くの入力を処理したいと思います。

または、入力スナップショットを可能な限り純粋に保ち、それらを状態に渡して、入力固有のロジックを非表示に保つことができるようにする方がよいでしょうか?

注:
この構造は、私が想像するゲームの動作に似ています。このアプリケーションはゲームではありませんが、できるだけ迅速に処理する必要があります。

4

4 に答える 4

2

キーボードとマウスを毎ティック単純にクエリすると、問題が発生することは保証できます。すべてのティックをクエリすると、(1 つのティックの時間領域内で) すばやく発生する入力を見逃すことがわかります。ユーザーが 2 つのティックの間にキー/ボタンを押して離す状況を想像してみてください (思った以上に発生します)。入力を完全に見逃してしまいます。

特に、このような入力イベントに完全に対応している C# では、イベントを使用する必要があります。

于 2008-10-28T18:22:19.820 に答える
2

各ティックでキーボードとマウスの状態を照会するのはなぜですか? はるかに優れた従来のソリューションは、キーボードとマウスから発生したイベントをキャプチャすることです。そうすれば、必要なときにのみ状態を更新する必要があります。

于 2008-10-28T14:25:36.333 に答える
1

XNA では、キーボード クラスを静的にすることでこれを行います。

KeyboardState state = Keyboard.GetState();

その後、上記のコード行で現在のキーの状態にアクセスできます。

于 2008-10-28T14:32:29.377 に答える
0

イベントを発生させ、引数を取得する必要があります。これは、これを処理する最も簡単で効率的な方法です。

class YourClass
{    
    //data members ...

    public void OnKeyboardPress(object sender, EventArgs args)
    {
        //handle your logic capturing the state here
    }
}

//elsewhere
someControl.KeyPress += new KeyPressDelegate(yourClassInstance.OnKeyboardPress);
于 2008-10-28T17:23:08.440 に答える