У меня нет опыта работы с Allegro, но логика будет такой же.
(так называемые) Реальные игры также имеют игровые циклы, но разница в том, что они используют потоки, которые работают параллельно, но в разные промежутки времени. Например, существуют разные потоки для физических вычислений, искусственного интеллекта, игрового процесса, звука, рендеринга ... поскольку пользовательские события обычно предполагают, что игровые события собираются до него (как предполагает Макс) и расходуются до следующего кадра (фактически некоторые собирают его в например 5 кадров).
Поскольку фрейм может быть слишком длинным, все события, поступающие из ОС, собираются игрой, поэтому эти входы называются буферизованными. Существует также еще один метод, который называется небуферизованным вводом, который не работает дискретно, но вместо этого вы тестируете его во время gameloop в тех самых случаях, когда он запрашивается.
Если пользовательский ввод очень важен, и вы вообще не хотите терять какие-либо входы, тогда вы можете использовать буферизованный, иначе небуферизованный. Однако небуферизованный может быть сложно, особенно во время отладки.
вот несколько ссылок
игровой отрывок игрового движка
Игровые циклы на IOS