1

クラスベースの FSM を初めて使用していますが、初期状態を設定するためのベスト プラクティスについて少し混乱しています。

Screen(主に) 遷移を処理するために使用するクラスにFSM を追加しました。伝統的に、私は次のようなことをします:

function update(frameTime : Number) : void
{
    switch(_currentState)
    {
        case STATE_TRANSITIONING_IN:
            slideTheButtonsIn();
            if(buttonsInPlace == true)
                changeState(STATE_ACTIVE);
        break;
        case STATE_ACTIVE:
            if(buttonClicked() == true)
                changeState(STATE_TRANSITIONING_OUT)
        break;
        case STATE_TRANSITIONING_OUT:
            slideButtonsOut();
            if(buttonsInPlace == true)
                removeThisScreen();
        break;
    }
}

かなり標準的な方法だと思います。

新しい状態に関する私の問題は、画面上のすべてのオブジェクトを作成する責任があるのは誰ですか? Screenすべてのボタンなどを作成してからMainMenuTransitionInStateクラスに渡す必要がありますか、それともMainMenuTransitionStateクラスでボタンを作成してから渡す必要がありますか、それともマークを完全に逃したのでしょうか?

ここであなたの賢明なアドバイスに感謝します。ありがとう!

4

1 に答える 1

1

ここでは、モデル ビュー コントローラー パターンが役立つ場合があります。

MainMenuScreen(意見)

これがモデルを表示するものです。ここですべての UI 関連オブジェクトを操作します。モデルを直接クエリして、モデルを初期化または更新します。

MainMenuFsm(コントローラ)

これは、ビューのイベント ハンドラーです。ユーザーがビューを操作するたびに、アクションをモデルの更新に変換します。

MainMenuState(モデル)

ここに状態を保存します。

于 2011-08-29T23:50:27.050 に答える