修改乘法计算以使用增量时间

时间:2010-04-19 09:10:57

标签: math multiplication exponential

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 个答案:

答案 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 =目标,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的结果,但它应该适用于所有值。

答案 1 :(得分:0)

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