画面ベースのメニュー ナビゲーションをエレガントに処理するためのデザイン パターンまたは戦略をお勧めできますか?
「画面ベース」とは、相互接続された一連のフルスクリーン「ページ」を意味し、ボタンは他の「画面」にリンクしています - たとえば、ゲームのユーザーインターフェイスのように。
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...
}
}
これを設計するためのより良い方法があるに違いありません。より良い方法を説明できますか?
乾杯、
スラッシュダック