Показать сообщение отдельно
Старый 11.03.2011, 15:46   #14
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,371
Написано 2,477 полезных сообщений
(для 6,865 пользователей)
Ответ: Пауза и свет

Сообщение от 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() для стейтов и будет ещё лучше.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Randomize за это полезное сообщение:
LLI.T.A.L.K.E.R. (11.03.2011), umnick (11.03.2011)