В моей игре мыши выглядят и ходят, но они очень медленные и их трудно использовать. Я думаю, это потому, что я использую фиксированную скорость. Я слышал, что в больших проектах разработчики используют дельта-время. Как рассчитать время дельты в переизбытке? Как рассчитать скорость, используя дельта-время?
14
Ответы:
«Дельта-время» - это время, прошедшее между обновлениями двух кадров (но оно также может использоваться в других контекстах; обычно это результат вычитания времени).
Вы можете получить дельта-время в избытке, используя метод glutGet и параметр GLUT_ELAPSED_TIME, а также некоторые операции.
Следующая строка возвращает количество миллисекунд с момента вызова glutInit (или первого вызова glutGet (GLUT_ELAPSED_TIME)):
Поэтому, если вы регистрируете текущее время timeSinceStart в каждом цикле рендеринга, вы можете узнать deltaTime, вычитая старое значение в новое.
Вы также можете сделать это почти так же, используя библиотеку ctime C / C ++ с clock () и макрос-константное выражение CLOCKS_PER_SEC, которое определяет отношение между тактом и секундой.
По сути, вы можете использовать deltaTime для обновления ваших движений в соответствии с этим прошедшим временем вместо использования фиксированного значения времени. Таким образом, скорость движения вашего персонажа должна быть почти одинаковой, если ваша программа работает со скоростью 60 кадров в секунду или со скоростью 10 кадров в секунду.
Вот небольшой пример: предположим, что вы хотите перемещать что-то на 10 единиц каждую секунду по оси x. Вы можете сделать что-то вроде этого (если deltaTime действительно использует миллисекунды).
Таким образом, независимо от того, обновлялась ли ваша программа 2 раза или 100 раз, через 1 секунду позиция должна быть почти такой же, и на игровой процесс меньше влияют низкие fps небольшого компьютера, чем если бы он использовал фиксированные значения.
С фиксированными значениями ==> низкие fps = меньше обновлений = медленные движения, тогда как высокие fps = больше обновлений = очень быстрые движения.
С deltaTime ==> «почти» те же движения.
Наконец, вы должны прочитать Фиксированный временной шаг по сравнению с переменным временным шагом в gamedev.stackexchange.
источник
positive int
обычно поднимается до 2.147.483.647, если подписано, и до 4.294.967.295, если не подписано ... так что даже если мы рассмотрим меньшее, 2.147.483.647 миллисекунд - это почти 25 дней ... Этого должно быть достаточно для обработки большинства игр. таймеры и даже если этого недостаточно, мы все равно можем разумно использоватьunsigned int
(~ 50 дней) или дажеlong long
(как я обычно делаю).QueryPerformanceCounter
на Windows иgettimeofday
на большинстве других. Вам придется запачкать руки и стремиться к чему-то большему, чем наименьший общий знаменатель API-интерфейсов платформы, особенно в C и C ++.