Можете ли вы порекомендовать шаблон проектирования или стратегию для элегантной обработки экранной навигации по меню?
Где «На основе экрана» означает серию взаимосвязанных полноэкранных «страниц» с кнопками, которые ссылаются на другие «Экраны» - как, например, в пользовательском интерфейсе игры.
Я реализовал шаблон проектирования на основе состояния, который я не рекомендую.
Код быстро запутывается и становится подверженным всевозможным ошибкам, основанным на состоянии, которые все труднее проверять.
Например:
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