C / Как управлять циклами в видеоигре?

Я уже сделал несколько видеоигр на C (небольшой персональный проект). И проблема, с которой я сталкиваюсь каждый раз, одна и та же, как управлять циклами в игре.

Например, я закодировал змею в SFML. Я обрабатывал циклы с частотой кадров: 5 кадров при нормальной, а при включении питания я изменил ее на 10. Это работает. Но это отвратительно. И это не будет работать правильно с плохим компьютером. В той же идее я также создал игру, в которой решил, что цикл равен повороту цикла (с бесконечным циклом). Та же проблема, высокопроизводительный компьютер будет работать быстрее, чем низкокачественный.

Итак, может кто-нибудь посоветовать мне, как правильно и правильно управлять циклами в видеоигре.

Заранее спасибо !

4

Решение

В общих чертах, вам нужно смоделировать игровое состояние таким образом, чтобы оно могло «продвигаться» с заданным приращением времени, а затем, в течение каждого цикла вашего основного цикла, определять, сколько времени прошло (обычно небольшая доля во-вторых) и продвинуть игровое состояние только на столько. Таким образом игры работают плавно, независимо от частоты кадров.

Интервал в основном становится масштабным фактором для всего движения. Например, если ваша змея движется вперед на 5 единиц расстояния в секунду, и во время вашего основного цикла вы обнаружите, что с момента последнего перемещения змеи прошло 0,01 секунды, вы продвинете свою змею на (0,01 * 5) единицу расстояние в течение этого цикла.

5

Другие решения

Частота кадров не должна влиять на игровой процесс. Если его получить 60FPS или 1000 FPS, то это ничего не должно поделать.

То, что вы хотите сделать, это посмотреть на дельта-время или прошедшее время, если этого достаточно, затем выполните имитацию или включите питание.

Поэтому, когда вы двигаете змею. Он хочет двигаться на расстояние за кадр. Если частота кадров низкая, расстояние будет больше, чем при высокой частоте кадров. Расстояние это speed_it_moves_at * delta_time,

6