您可以推薦一個設計模式或策略來優雅地處理基於屏幕的菜單導航嗎?菜單導航的設計模式(在c/C++中)
其中「基於屏幕」是指一系列相互連接的全屏「頁面」,並帶有鏈接到其他「屏幕」的按鈕 - 例如在遊戲的用戶界面中。
我已經實現了一個基於狀態的設計模式,我不建議這樣做。
代碼變得雜亂無章,變得越來越容易出現各種基於狀態的錯誤,這些錯誤越來越難以測試。
如:
void Update(float dt)
{
switch(curState)
{
case kScreenA:
ScreenA.Update(dt);
if(ScreenA.IsDone())
curState = kScreenB;
break;
etc...
}
通過這種方法,你最終需要處理的回報條件:
void InitState()
{
switch(nextState)
{
case kScreenC:
if(curState == kScreenA)
ScreenC.InitFromA();
if(curState == kScreenB)
ScreenC.InitFromB();
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...
}
}
}
用這種方法,你可能最終需要處理進入條件
而且
所以必須有更好的方法來設計這個,你能描述一個更好的方法嗎?
乾杯,
slushduck