Что такое Дельта-время в LIBGDX
Что такое Дельта-время в LIBGDX? Я читал много постов по этому поводу. Насколько мне известно, Дельта время,
- промежуток времени между предыдущим и текущим кадром
- delta time добавит до 1, так как его вычисление X кадров в секунду ie.(1/x кадров)
-
чтобы сделать скорость постоянной для игры, мы используем dt
Если мы скажем 60 * dt, то он будет двигаться 60 кадров в секунду, независимо от скорости мобильного телефона(для пример) есть.
Итак , это то, что я знаю о Дельта-времени, но я не получаю четкого представления об этом, потому что, будь то для метода обновления или рендеринга, мы передаем Дельта-время, но где в коде мы указываем для расчета в секунду?
например,
public void update(float dt)
{
float distance +=2*dt;
}
будет ли этот код перемещать 2 кадра в секунду? Если да, то что будет делать приведенный ниже код?
public void update(float dt)
{
....
}
public void render(float delta)
{
update(delta);
}
Итак, мне нужны ответы,
- что вышеуказанный код подразумевает??
- что на самом деле происходит за код?
- почему мы это делаем?
-
где в этом коде мы указываем, что он должен перемещать X кадров в секунду, как в предыдущем примере?
Я могу понять, что метод рендеринга передает Дельта-время методу обновления, но мне нужно некоторое четкое представление об этом. Извините, если вопрос кажется глупым, но на самом деле трудно продолжать, не зная, что событие.Любая помощь будет здорово !!
2 ответов
Gdx.graphics.getDeltaTime()
- это время между началом предыдущего и началом текущего вызова render()
. Это также значение, которое вы получаете в своем Screen#render()
метод. Вот и все. Никакой черной магии. Он просто берет текущее время и вычитает из него предыдущее время. The блок этого значения секунд. Обратите внимание, что это не складывается в один.
поэтому, если в предыдущий раз метод был вызван в 6:51:30.0159512 pm
и в настоящее время он называется в 6:51:30.0324858 pm
разница составляет 0.0165346 seconds
.
скорость (скорость) измеряется в "единицах" в секунду, например meter per second
или короче: m/s
. Если ваш автомобиль путешествует по 360 m/s
и прошло время 0.0165346 s
, тогда расстояние, которое вы прошли за это время, -0.0165346*360 s*m/s
=>5.952456 m
, так почти 6 метров.
обратите внимание, что это базовая физика, она не специфична для libGDX. Если тебе трудно понять, тогда, возможно, ты захочешь ... читать на скорость.
чтобы ответить на ваши нижние вопросы, которые, я думаю, о разделении вашего метода рендеринга на отдельный метод обновления.
- код не подразумевает ничего
- за кодом нет ничего
- использование четко определенных коротких методов обычно является хорошей практикой, прочитайте:разделение
- не знаю, что вы подразумеваете под "кадром", но скорость умножить на время получить расстояние
это проще, чем вы делаете это, чтобы быть. Дельта-время-это сколько секунд прошло с момента последнего вызова рендеринга. С displacement = velocity * time
вы умножаете скорость объекта на Дельта-время, чтобы узнать, как далеко он продвинулся с момента последнего вызова рендеринга. Скорость в единицах в секунду. Это может быть константа в вашем коде или что-то, что вы вычисляете, если это зависит от ускорения. Единицы расстояния, которые вы используете, зависят от вас. Они могут быть метрами, пикселями(не очень хорошая идея, так как различные устройства имеют различные размеры экрана) или некоторая другая произвольная единица расстояния.
не имеет смысла говорить, что дельта-время складывается в один. Это не более чем количество секунд с момента последнего кадра (так что обычно это намного меньше 1.0).
также не имеет смысла говорить, что вы хотите перемещать что-то в кадрах в секунду. Вы хотите переместить что-то на некоторое расстояние единиц в секунду.
ваш первый пример кода не compileable. Но если ты напишешь что-то вроде
myObject.position.x += 5*dt;
Это означает, что ваш объект движется горизонтально на расстоянии 5 единиц в секунду, и поэтому вы обновляете соответственно его горизонтальное положение.