Изменение расчета умножения для использования дельта-времени - PullRequest
1 голос
/ 19 апреля 2010
function(deltaTime) {
  x = x * FACTOR; // FACTOR = 0.9
}

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

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


А как же

function(deltaTime) {
  x += (target - x) * FACTOR; // FACTOR = 0.2
}

Ответы [ 2 ]

2 голосов
/ 19 апреля 2010
x = x * Math.pow(0.9, deltaTime*30)

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

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

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

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

Пусть x0 будет начальным значением, а xn будет значением через n / 30 секунд. Также пусть T = цель, 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, но оно должно работать для всех значений.

0 голосов
/ 19 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...