Я работаю над 2D-игрой для школьного проекта. Шаблон, который мой учитель дал хорошо, но я хотел заменить очень, очень глупую вещь в коде. В коде он называет тяжелый метод 20 раз, чтобы замедлить игру. Вместо этого я хочу проверить, нужно ли обрабатывать следующий кадр.Настройка фиксированного FPS не работает
Игра является объектом внутри пространства имен шаблонов. В этом пространстве имен был бесконечный цикл, который вызывает метод тика игры и свопирует буферы кадров.
Внутри этого шаблона, я заменил Game->Tick()
с простой, если заявление:
if (game->Ready(lastftime)) {
game->Tick();
}
lastframe
разница во времени в в секундах между последний раз она называется и сейчас. Я знаю, что могу использовать это время, чтобы рассчитать движения внутри игры, но это не то, что я хочу сделать прямо сейчас!
Это Ready
метод:
bool Game::Ready(float timedif) {
// Add time to framecounter
framecounter += timedif;
// Check if the counter over lapses the fps
if (framecounter > fps) {
// If so, substract the fps from the counter
while (framecounter > fps) {
framecounter -= fps;
}
m_Screen->Clear(0);
Draw();
return true;
}
// Frame is still inside the fps margin
return false;
}
fps
рассчитывается следующим образом: fps = 1000.0f/60
Я понятия не имею, почему он не бежит со скоростью 60 кадров в секунду, и я 100 % уверен, что это было вызвано больше, чем (проверено на printf
). Любая помощь будет оценена по достоинству.
, что это то, что 'lastftime' вы передаете' Ready'? имя указывает на момент времени, но в Ready вы относитесь к нему как к разнице – codeling
Если «разница» - это время в секундах, вам будет очень сложно провести отсчет кадров выше 1fps ... – RedX
Также переменная «fps» представляет количество миллисекунд между кадрами, а не количество кадров в секунду – Paddyd