Я проверил значение дельты в методе рендеринга в классе Screen. Я видел, что оно не постоянно. Может ли кто-нибудь сказать, откуда он взялся и что это такое? И отличается ли он в разных размерах экрана? Если это так, как мы можем преодолеть это? Я спрашиваю об этом, потому что прыжок моего игрока зависит от дельта-времени, а иногда он прыгает слишком высоко.....
Дельта-значение в методе рендеринга libgdx
Ответы (2)
deltaTime
не имеет ничего общего с размерами экрана. Это количество времени, которое потребовалось для рендеринга последнего кадра. Рендеринг в случае LibGDX также включает всю логику, которую вы выполняете в своем методе render()
.
Обычно вы хотите, чтобы игра работала с одинаковой скоростью на разных устройствах. Если ваш метод рендеринга выглядит примерно так...
public void render(float deltaTime) {
float speed = 5f;
position = position + speed;
}
... тогда позиция будет меняться быстрее на быстрых устройствах и менее быстро на медленных только потому, что метод рендеринга вызывается разное количество раз.
Чтобы решить эту проблему, есть deltaTime
, который в случае LibGDX находится в секундах. Чтобы позиция менялась с одинаковой скоростью на разных устройствах, обычно это делается так:
public void render(float deltaTime) {
float speedPerSecond = 5f;
position = position + (speedPerSecond * deltaTime);
}
float delta
в вашем методе render(delta)
— это время между последним кадром и этим кадром, указанное в секундах. Вы можете получить это значение везде, вызвав Gdx.graphics.getDelta()
. Это значение сглаживается по n кадрам. Чтобы получить реальное время (что в большинстве случаев не обязательно), вы можете вызвать Gdx.graphics.getRawDeltaTime()
. Это значение используется для перемещения объектов в игре в зависимости от времени, прошедшего между кадрами, вместо их перемещения на фиксированное количество пикселей. Для этого вы можете просто умножить movementSpeed
на это delta
, чтобы получить расстояние, которое должен пройти ваш объект.
Я бы предложил ограничить ваше дельта-время, так как огромное дельта-время (вызванное медленными устройствами или чем-то еще) может испортить, например, обнаружение столкновений. Чтобы ограничить его, например, delta
временем 30 кадров в секунду, вы можете просто сказать delta = Math.min(delta, 1/30);
scene2D
Stage
, например, ограничивает его значением 1/30. Так что, если вы играете со скоростью ниже 30 кадров в секунду, дельта больше не учитывается. Попробуйте использовать разные значения и посмотрите, какое из них лучше для вас.
- person Springrbua; 14.03.2014