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
}
答案 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))