Лучший ответ: это зависит .
Вы не должны ограничивать ни один
Обновления : если ваши обновления не привязаны к верхнему пределу, игровая логика должна зависеть от количества дельта-времени , чтобы избежать ускорения или замедления игры в зависимости от компьютера, на котором она запущена. Это очень распространенный подход, используемый во многих играх, но он не единственный.
Рендеринг . Если рендеринг не ограничен верхним пределом, кадровый буфер может быть представлен в неполном или ошибочном состоянии, что может привести к разрыву артефактов . Вот почему во многих играх используется вертикальная синхронизация (v-sync)
Вы можете ограничить оба
Обновления : некоторые игры используют фиксированные временные шаги для некоторых или всех своих игровых систем. Этот подход работает так же, как вы описали. Количество обновлений в секунду ограничено верхней границей, чтобы гарантировать, что на высококлассном компьютере не будет происходить слишком быстрых вещей. Это устраняет необходимость в дельта-синхронизации. Некоторые приложения лучше с фиксированными временными шагами, некоторые с дельта-синхронизацией. Выбор подходов будет полностью зависеть от того, чего именно вы пытаетесь достичь. В онлайн-книге GameProgrammingPatterns есть глава, посвященная игровым циклам, которая затрагивает обе архитектуры.
Рендеринг : число кадров в секунду должно быть установлено на верхний предел, чтобы избежать вышеупомянутой проблемы с разрывом, однако ваше приложение не должно пытаться делать это вручную с некоторой блокировкой процессора. Вместо этого включите v-sync и позвольте нижележащему оборудованию синхронизироваться с частотой обновления монитора. Благодаря этому ваша игра будет совместима с будущими мониторами, которые могут работать на гораздо более высокой частоте, чем обычные в настоящее время 60 Гц. Стоит также отметить, что многие геймеры, особенно те, кто занимается тестированием производительности, по-прежнему предпочитают работать без v-sync, чтобы обеспечить максимально возможную частоту кадров. Поэтому имеет смысл разрешить включение или отключение функции во время выполнения.
То, что вы не должны ограничивать
Если ваша игра использует основанный на опросе подход к пользовательскому вводу, например: вызывает своего getInput()
рода вызовы, чтобы обновить состояния контроллера на этапе обновления, тогда это лучше, если не ограничено. Или, если ограничено, тогда установите очень высокую верхнюю границу. Чем чаще вы запрашиваете пользовательский ввод и воздействуете на него, тем более отзывчивым и плавным будет «чувствовать» игра. Так называемые игры с частотой 60 Гц, о которых мы сейчас слышим, не обновляют ИИ и все мировые государства с такой скоростью, некоторые даже не рендерится так быстро, но они запрашивают данные контроллера по крайней мере 60 раз в секунду и соответственно обновляют аватар игрока. Конечно, это актуально только для динамичных игр.