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

此功能被称为在游戏循环。首先假设它在恒定的30 FPS运行,因此deltaTime总是1/30。

现在游戏被改变,以便deltaTime并不总是1/30而成为可变的。如何可以结合deltaTimex的计算以保持相同?

的“每秒效应”

和怎么样

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))

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top