【发布时间】:2011-12-30 16:53:52
【问题描述】:
您能否推荐一种设计模式或策略来优雅地处理基于屏幕的菜单导航?
“基于屏幕”是指一系列相互连接的全屏“页面”,其中包含链接到其他“屏幕”的按钮 - 例如在游戏的用户界面中。
我已经实现了基于状态的设计模式,我不建议这样做。
代码很快就会变得混乱,并且容易出现各种基于状态的错误,这些错误变得越来越难以测试。
例如:
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...
}
}
所以一定有更好的方法来设计这个,你能描述一下更好的方法吗?
干杯,
小鸭子
【问题讨论】:
标签: c++ c user-interface hud