3

画面ベースのメニュー ナビゲーションをエレガントに処理するためのデザイン パターンまたは戦略をお勧めできますか?

「画面ベース」とは、相互接続された一連のフルスクリーン「ページ」を意味し、ボタンは他の「画面」にリンクしています - たとえば、ゲームのユーザーインターフェイスのように。

State ベースのデザイン パターンを実装しましたが、これはお勧めしません。
コードはすぐに乱雑になり、あらゆる種類の状態ベースのバグが発生しやすくなり、テストがますます難しくなります。

例えば:

void Update(float dt)
{
    switch(curState)
    {
        case kScreenA:
            ScreenA.Update(dt);
            if(ScreenA.IsDone())
                curState = kScreenB;
        break;
        etc...
}

このアプローチでは、戻り条件を処理する必要があります。

void Update(float dt)
{
    switch(curState)
    {
       case kScreenA:
           ScreenA.Update(dt);
           if(ScreenA.IsDone())
           {
               if(ScreenA.ReturnState == 1)
                   curState = kScreenB;
               if(ScreenA.ReturnState == 2)
                   curState = kScreenC;
               etc...
            }
     }
}

また、このアプローチでは、エントリ条件を処理する必要が生じる場合があります。

void InitState()
{
    switch(nextState)
    {
        case kScreenC:
            if(curState == kScreenA)
                ScreenC.InitFromA();
            if(curState == kScreenB)
                ScreenC.InitFromB();
            etc...
     }
}

これを設計するためのより良い方法があるに違いありません。より良い方法を説明できますか?

乾杯、
スラッシュダック

4

2 に答える 2

3

シンプルなメニュー システムの場合は、State Design パターンを使用できます。インターフェイス Menu を作成し、具象クラス (FirstMenu、SecondMenu など) で実装します。メニューを描画し、currentSelected Menu の参照を持つ MenuContext を作成します。この currentSelected Menu を使用することで、ContextMenu は呼び出しを適切な Menu に委譲することを認識します。State パターンを使用して、エレガントなメニュー ツリーを作成することもできます。 https://en.wikipedia.org/wiki/State_pattern

于 2016-05-08T22:10:16.607 に答える
0

GUI を実装する通常の方法は、最初にMVPまたはプレゼンターを使用することです。メニューが複数の画面で複雑な場合は、いくつかの MVP トリオが必要です。

于 2011-11-16T18:37:21.450 に答える