Изменение расчета умножения для использования Delta Time

StackOverflow https://stackoverflow.com/questions/2666339

Вопрос

function(deltaTime) {
  x = x * FACTOR; // FACTOR = 0.9
}

Эта функция называется в игровой петле. Сначала предположим, что он работает с постоянной 30 кадров в секунду, так deltaTime всегда 1/30.

Теперь игра изменилась так deltaTime не всегда 1/30, но становится переменной. Как я могу включить deltaTime в расчете x Чтобы сохранить «эффект в секунду» то же самое?


И что насчет

function(deltaTime) {
  x += (target - x) * FACTOR; // FACTOR = 0.2
}
Это было полезно?

Решение

x = x * Math.pow(0.9, deltaTime*30)

Редактировать

Для вашего нового обновления:

x = (x-target) * Math.pow(1-FACTOR, deltaTime*30) + target;

Чтобы показать, как я туда попал:

Пусть x0 будет начальным значением, а xn - значение после n / 30 секунд. Также пусть t = target, f = фактор. Потом:

x1 = x0 + (T-x0)F = (1-F)x0 + TF
x2 = (1-F)x1 + TF = (1-F)^2 * x0 + (1-F)TF + TF

Продолжение с x3, x4, ... покажут:

xn = (1-F)^n * x0 + TF * (1 + (1-F) + (1-F)^2 + ... + (1-F)^(n-1))

Теперь подставляя формулу для суммы геометрической последовательности, дадут результат выше. Это действительно только доказывает результат для целого числа n, но он должен работать на все значения.

Другие советы

x = x * powf(0.9, deltaTime / (1.0f / 30.0f))

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top