0

プレーヤーがコントロールを変更し、そのデータをテキスト ファイルに保存する方法を実装しようとしています。

私の InputManager クラスだけが Xna.Input.Keys 列挙型を使用し、キーボード入力を取得する他のすべてのクラスは文字列で渡されます。InputManager には、キーが外部から渡された動的文字列であるディクショナリが含まれており、値は Input.Keys 列挙型の対応するキーです。

これらはすべてファイル (keyconfig.cfg、単なる標準テキスト ファイル) からロードされます。
いろいろとコードを修正してみましたが、うまく動かないみたいです。問題は、InputManager の一部である私の特定のメソッドにあるようです。

public bool IsButtonPressed(string keyString)
    {
        if (keyState.IsKeyDown(KeyFromString(keyString)) && keyState_old.IsKeyUp(KeyFromString(keyString)))
           return true;
        return false;
    }
  • KeyFromString は文字列を Keys 型にキャストします
  • keyState と keyState_old は KeyboardState インスタンスです (_old は最後のフレームの画像です)
  • KeyboardState インスタンスは、Update() によってフレームごとに更新されます。

次のように、InputManager の Update() 内で keyState および keyState_old 変数を設定しています。

public void Update(GameTime gameTime)
{
    keyState = Keyboard.GetState();
    mouseState = Mouse.GetState();
    //Updates some other stuff within the class here, unrelated to keyboard input
    keyState_old = keyState;
}

私はこれに完全に行き詰まっています。これのいずれかが不明な場合はお詫びします。私の英語は最高ではありません。前もって感謝します。

4

2 に答える 2

0

上書きを避けるために、新しい状態を読み取る前に keyState_old を割り当てる方がおそらく安全です。

public void Update(GameTime gameTime)
{
    keyState_old = keyState;  // Do this first

    keyState = Keyboard.GetState();  // Then this
    mouseState = Mouse.GetState();
    //Updates some other stuff within the class here, unrelated to keyboard input
}

それ以外の場合、IsButtonPressed への呼び出しが InputManager.Update メソッドの外部から行われた場合、現在のキーの状態と古いキーの状態は同じ値になります。

于 2013-07-02T10:13:56.557 に答える
0
keyState = Keyboard.GetState();
keyState_old = keyState;

これがあなたの問題です。新しい状態を取得して に入れkeyState、次に ... に入れるkeyStatekeyState_old、同じ状態の 2 つのコピーができます。無関係なもののブロックの両側ではなく、これらの 2 つの行をまとめて、逆にします。古い状態を保存してから、新しい状態取得します。

于 2013-07-02T10:14:35.537 に答える