修改相乘计算中使用的增量时间
-
28-09-2019 - |
题
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
}
解决方案
x = x * Math.pow(0.9, deltaTime*30)
修改强>
有关您的新的更新:
x = (x-target) * Math.pow(1-FACTOR, deltaTime*30) + target;
要展示我是如何到达那里:
让X0是初始值,并且n / 30秒后XN是的值。也让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
的结果,但它应该对所有值工作。
其他提示
x = x * powf(0.9, deltaTime / (1.0f / 30.0f))
不隶属于 StackOverflow