0

だから私はこのコードを持っています: 変数:

    enum gameState
    {
        gameLoading,
        mainMenu,
        gameOptions,
        levelSelect,
        gamePlaying,
        gameOver
    }

Update()メソッドでは:

        if (CurrentGameState == gameState.gameLoading)
        {
            if (Keyboard.GetState().IsKeyDown(Keys.E))
            {
                graphics.ToggleFullScreen(); //?
            }
            graphics.ApplyChanges();
        }
        ...
        //gameState.gameLoading logic
        if (Keyboard.GetState().IsKeyDown(Keys.Enter))
        CurrentGameState = gameState.mainMenu;

だから私が望むのは、Enterキーを押してgameState.gameLoading、両方の解像度をフルスクリーンにして、gameStateに等しいことmainMenuです。gameState.mainMenuEnter キーを押しても解像度をフルスクリーンからウィンドウ表示に変更できない場合。これを達成する方法は?たぶんリストを使用していますか?

4

2 に答える 2

1

ゲームの状態がどのようなものであるかは既に決まっているので、ステート マシン デザイン パターンを使用して入力処理の動作を制御してみませんか? このパターンのアジェンダは、実際のオブジェクトからその状態に作業を委譲することです。ピンカーマンが提案したように、状態ごとに Update() メソッドを使用してクラスを作成し、そこにすべての入力処理 + 状態遷移ロジックを入力します。ここで例を見つけることができます: http://sourcemaking.com/design_patterns/state。それを使用するときは、抽象状態クラスを使用して完全に状態と遷移からコンテキストを切り離し、それを継承します。これにより、必要に応じてステート マシンを簡単に変更できます。簡単な例を次に示します。

public class Context
{
    private GameState state;

    public void Update()
    {
         state.Update();
    }

    public void ChangeState(GameState nextState)
    {
         state = nextState;
    }
}

public abstract class GameState
{
    protected Context context;

    public virtual void Update()
    {
        // some basic implementation if you want.
    }
}

public class GameLoadingState : GameState
{
    public override void Update()
    {
        // Handle key presses.
        context.ChaneState(new MainMenuState(context));
    }
}

public class MainMenuState : GameState
{
    public override void Update()
    {
        // Handle key presses in some other way.
        // Change state if needed.
    }
}

繰り返しになりますが、パッシブ コンテキストの実装が気に入らない場合は、よりアクティブに変更できます。お役に立てれば!

于 2013-08-27T11:52:22.090 に答える
1

異なる動作が必要な場合は、異なるクラスを用意する必要があると思いますgameState。これにより、それぞれUpdateが独自のgameState.

于 2013-08-24T20:44:00.197 に答える