你能推荐一种设计模式或策略来优雅地处理基于屏幕的菜单导航吗?
其中“基于屏幕”是指一系列相互连接的全屏“页面”,其中包含链接到其他“屏幕”的按钮——例如在游戏的用户界面中。
我已经实现了一个基于状态的设计模式,我不推荐。
代码很快就会变得混乱,并且容易出现各种基于状态的错误,这些错误变得越来越难以测试。
例如:
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...
}
}
所以一定有更好的方法来设计这个,你能描述一个更好的方法吗?
干杯,
slushduck