Самые успешные конкурентные движки любят id Tech
, GoldSrc
, Source
и такие , позволяют ограничения кадровых частоты.
Вы можете играть с 30, с 60, с 99, с 72, с 68 и т. Д. Короче говоря, вы можете ограничить это и контролировать ограничение.
Мне было интересно, как я могу ограничить частоту кадров?
Не интересует код, но теория.
frame-rate
joltmode
источник
источник
Ответы:
Теория такова: проверяйте, когда вы последний раз визуализировали кадр, и если еще не пришло время рисовать еще один кадр, тогда не делайте этого и ждите, пока он не будет.
источник
Скажем, вы хотите ограничить частоту кадров до 60 кадров в секунду, это означает, что каждый кадр имеет время рендеринга 1/60 с = 16,67 мс (округлено)
Чтобы ограничить частоту кадров, вы просто проверяете время в начале игрового цикла, затем вы можете сравнить его со временем в конце игрового цикла: если разница меньше 16,67 мс, вы должны остановиться на это время.
Один из способов сделать это - использовать:
Однако, поскольку
sleep(x)
выдает поток за минимальныеx
миллисекунды, вы точно не знаете, вернетесь ли вы назад во времени.Лучшим способом было бы использовать:
Это возвращает поток и запрашивает контроль как можно скорее.
Другое решение состоит в том, чтобы просто иметь занятый цикл ожидания, это дает вам лучший контроль, но использует ЦП без необходимости.
Помните, что планировщик ОС всегда может отобрать управление у вашего потока, поэтому будьте готовы к некоторым колебаниям.
источник