Сообщение от Diablo1909
Весьма примитивно и не гибко.
Обычно делают так :
1) Прописывают флаги состояний игры.
2) Формируется хук отрисовки / обновления и он же (хук) регистрируется в системе при запуске приложения.
3) Любое состояние управляется с помощью системы событий.
Все это дело есть в БМаксе. В Б3Д надо делать самому ( хуки и события ).
в конечном итоге управление состояниями сводится к такому виду :
'Обьявление констант и хуков
Const GAME_MENU:Byte = 0
Const GAME_GAME:Byte = 1
Const GAME_PAUSE:Byte = 2
Const GAME_END:Byte = 125
' регистрируем события :
AllocUserEventID(GAME_MENU,"МЕНЮ!")
AllocUserEventID(GAME_GAME,"ИГРА!")
...
Одной строчкой кода мы запускаем хук EmitEventHook, в котором обработается созданое событие, в обработке события примет участие и наш созданный выше обработчик.
Смотри сорсы БМакса. Ничего сложного нет. =)
|
Ужас! Вот честно! Не легче ли:
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() для стейтов и будет ещё лучше.