![]() |
Delta timing
UPD Рывки оказались из-за округлений:( Теперь беда в другом. Допустим герой прыгнул в момент времени, в котором dt(время с предыдущего обновления игры) было 40 миллисекунд. Сила его прыжка увеличилась сильно увеличилась по сравнению с нормой. Затем, dt опять пришло к нормальным 16.6666 миллисекундам. Поэтому коэффицент G, который отвечает за ускорение свободного падения опять нормальный. В результате получаем гигантский прыжок. Как этого избежать? |
Ответ: Delta timing
Если это Unity, то для физики есть FixedUpdate и Time.fixedDeltaTime
Но по сути если провести аналогию с твинингом в блице, то тебе просто надо вызывать логику только допустим 30 раз в секунду и если с предыдущего обновления прошло времени в два раза больше, то выполнить логику два раза. |
Ответ: Delta timing
Оно то хорошо, когда числа ровные. Дробное количество раз не получится же логику выполнить. Мне поэтому и интересно, уместно ли это для фпс ниже стандартного. Понятное дело, что это необходимо для ребят с крутыми конфигами, чтобы они по карте не гоняли как сверхскоростные болиды.
|
Ответ: Delta timing
Да в чем проблема я не понимаю?
PHP код:
|
Ответ: Delta timing
|
Ответ: Delta timing
В данном способе 2 проблемы.
Если таки у игрока больше 60 фпс - цикл вообще не запустится. Если у игрока 29 фпс, разницы с 30 фпс почти не должно быть, однако update() будет выполнено 3 раза, в то время как при 30 фпс - 2 раза. |
Ответ: Delta timing
Если апдейт логики можно сделать только с фиксированным шагом, то лучше действительно сделать жесткую привязку к fps и ограничить его.
|
Ответ: Delta timing
Цитата:
|
Ответ: Delta timing
Исходя из первого поста, почему сила прыжка зависит от dt? Она не должна, при прыжке персонаж получит ускорение в 100 единиц. Далее при применении ускорения - применяешь dt.
|
Ответ: Delta timing
moka
Сейчас так и делаю. Но баланса все равно нету: игрок с маленьким фпс не может прыгнуть так же высоко, как игрок с нормальным. PAX Код:
public float timeStep = 1000f / 60f; Код:
ellipsedTime += Time.deltaTime * 1000f; Код:
while(ellipsedTime >= timeStep) |
Ответ: Delta timing
А теперь посмотри на эту строку внимательно:
PHP код:
В твоем примере 29 FPS будет 30 раз срабатывать логика, она даже с 15 FPS будет 30 раз срабатывать. И даже имея 128 FPS с шагом в 1000f / 60f логика будет срабатывать 60 раз в секунду в среднем. |
Ответ: Delta timing
При уменьшении фпс, увеличивается количество вызова логики, что будет уменьшать фпс. Получаем рекурсивный проигрыш производительности.
|
Ответ: Delta timing
Не хочешь признать, что был не прав. Ладно.
Цитата:
|
Ответ: Delta timing
Я был не прав, да, не заметил "+=". И не спорю, что при слабой логике это было бы отличным решением.
Но решение с обычным домножением скоростей на deltaTime кажется более верным и логичным, разве нет? |
Ответ: Delta timing
Если физика зависит от времени, то нет. Логичнее использовать фиксированный шаг времени. Если физика рассчитывается на больших интервалах времени, то меньше точность.
|
Часовой пояс GMT +4, время: 21:18. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot