Не имея отношения к проблеме, вы можете проверить таймер, ища событие ALLEGRO_EVENT_TIMER
.Вы можете использовать event.timer.source
, чтобы проверить, какой это таймер, если у вас их больше одного.
Я думаю, что основная проблема здесь заключается в том, что вы рисуете графику со скоростью 60 кадров в секунду, но обновляете ввод с неограниченнымтемп.Это на самом деле задом наперед.Вы хотите обновить вход с фиксированной скоростью.Вы можете рисовать графику так часто, как вам хочется ... хотя нет смысла обновлять графику, если ничего не изменилось.
Так что это должно выглядеть примерно так:
if(event.type == ALLEGRO_EVENT_TIMER)
{
update_input();
update_display();
}
Однако, это не реализует пропуск кадров, если дела идут слишком медленно.Что вы должны сделать, это установить таймер в выделенной очереди (которая не содержит других источников событий).Затем, пока в этой выделенной очереди таймера есть события, обновите вход.
Затем обновите отображение, если вы обработали хотя бы один тик.Таким образом, вы можете, если дела идут слишком медленно, сделать несколько входных обновлений для каждого нарисованного кадра.