Логика основного цикла игры

Я пишу игру на C++ с использованием allegro 5. В Allegro 5 есть события, которые помещаются в очередь событий (например, щелчок мышью или отметка времени по истечении времени 1/FSP). Итак, мой вопрос: как должна быть логика основного цикла моей игры, или, поскольку он основан на событиях, я могу реализовать его без основного цикла??

Есть идеи, как в реальных играх это делается? Ссылки будут хорошими.

2 ответа

Решение

У меня тоже нет опыта работы с Allegro, но логика была бы такой же.

(так называемые) Реальные игры также имеют игровые циклы, но разница в том, что они используют потоки, которые работают параллельно, но в разные промежутки времени. Например, существуют разные потоки для физических вычислений, ИИ, игрового процесса, звука, рендеринга... поскольку пользовательские события обычно предполагают, что игровые события собираются перед ним (как предполагает Макс) и расходуются до следующего кадра (фактически некоторые собирают его в например 5 кадров).

Поскольку фрейм может быть слишком длинным, все события, поступающие из ОС, собираются игрой, поэтому эти входы называются буферизованными. Существует также еще один метод, который называется небуферизованным вводом, который не работает дискретно, но вместо этого вы тестируете его во время gameloop в тех самых случаях, когда он запрашивается.

Если пользовательский ввод очень важен, и вы вообще не хотите терять какие-либо входы, тогда вы можете использовать буферизованный, в противном случае небуферизованный. Однако небуферизованный может быть сложно, особенно во время отладки.

вот несколько ссылок
книга отрывок игрового движка
Игра Петли на IOS

У меня нет опыта работы с Allegro, но при использовании SFML и рендеринга игры с OpenGL я сам опрашиваю очередь событий как часть моего основного цикла. Что-то вроде приведенного ниже псевдокода (но более абстрактного):

while(game_on)
{
   auto events = poll_occured_events();
   for_each(events, do_somewithng_with_event);

   render_game();
}

Кажется, до сих пор работает нормально... Я думаю, что подобное возможно в Аллегро. Событийные игры сложны, так как вам нужно постоянно обновлять игру.

Вы можете (возможно) создать основной цикл в другом потоке, а затем синхронизировать поток событий и поток игр...

Другие вопросы по тегам