Как лучше всего справиться с ситуацией, которая может возникнуть, когда у пользователя есть два или более монитора с разными разрешениями и интервалами вертикальной синхронизации?
Это применимо, когда игра имеет фиксированный временной интервал и работает в оконном режиме: если один монитор имеет частоту кадров 60,056, а другой имеет частоту кадров 59,94, вертикальная синхронизация в конечном итоге не выполнит свою работу, если Игровое окно перемещается с основного экрана на другой.
Также будет иметь место временное алиасинг, поскольку временной шаг неправильно настроен на другую частоту синхронизации. Как игры обычно решают эту проблему?
n
с минимальнойO(n)
сложностью (оптимальноO(1)
), то ни одно из сказанного мной не применимо. Интерактивные симуляции, как правило, не работают таким образом.Ответы:
Шаги игровой логики не должны синхронизироваться с логикой отображения, даже если вы используете фиксированный временной шаг.
Рассмотрим геймплей как:
Неважно, сколько времени
draw()
занимают ваши звонки. До тех пор, пока выdo_step()
занимаете меньшеtime_per_step
, ваша игровая логика не будет отставать.источник
X
логические кадры в секунду дляY
графических кадров в секунду,X != Y
то есть вам придется либо заставить логику придерживаться графики (повторяющиеся и пропущенные кадры), либо графику - логику (разрывая). Другая альтернатива - заставить логику работать на скорости графики, что приведет к временному наложению. Здесь нет ракетостроения.