Показать сообщение отдельно
Старый 11.03.2011, 18:38   #15
Черный крыс
 
Сообщений: n/a
Ответ: Пауза и свет

Сообщение от Randomize Посмотреть сообщение
Ужас! Вот честно! Не легче ли:
Type TState Abstract
   Global 
Current:TState
   Method Update
() Abstract
   
Method Draw() Abstract
EndType
 
TState
.Current = New TGameState
 
Repeat
   TState
.Current.Update()
   
TState.Current.Draw()
   
Flip()
Until Keyhit(Key_Escape)
 
 
 
Type GameState Extends TState
   Field PlayerName
$ = "LoL"   
 
   
Method Update()
   
EndMethod
 
   Method Draw
()
    
DrawText("Player name: "+PlayerName,0,0)
   
EndMethod
EndType
 
Type GameOverState 
Extends TState
   Method Update
()
   
EndMethod
 
   Method Draw
()
    
DrawText("Nice try, ass hole!",0,0)
   
EndMethod
EndType 
Нужно ещё добавить Init() и Destroy() для стейтов и будет ещё лучше.
Хмм....весьма примитивно и снова не гибко.
На самом деле твой метод ужасен.
Зачем плодить отдельные классы на состояния?
Init() и Destroy() для игрового состояния - это вообще бред.
Во вторых при твоем подходе весьма затруднительно будет комбинировать стейты между собой, а тут все просто : CreateEvent(GAME_WORLD_DRAW_ONLY | GAME_PAUSE).Emit() - дали команду движку что приложение находится в паузе. А движок уже сам допиливает этот флаг ( рисовать но не обновлять мир + рисовать и обновлять меню паузы). флаг GAME_PAUSE - отвечает только за отрисовку потемневшего задника + обновление и отрисовку менюхи, а за застывший задний кадр отвечает впередиидущий флаг состояния. На то она и гибкость - что жестко ничего привязывать не надо.
Если тебя испугал тот громозкий код, то там происходит всего-то - инициализация при запуске программы, зато главный цикл - 3 строчки кода. И мне не надо запоминать и где то хранить переменные стэйтов, а вместо этого просто комбинировать 6-7 основных стэйт-флагов. =)

ЗЫ Во всех нормальных программах управление ядром осуществляется через события.
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо за это полезное сообщение:
LLI.T.A.L.K.E.R. (11.03.2011), umnick (11.03.2011)