複数の計算を変更して、デルタ時間を使用します
-
28-09-2019 - |
質問
function(deltaTime) {
x = x * FACTOR; // FACTOR = 0.9
}
この関数は、ゲームループで呼び出されます。最初に、それが一定の30 fpsで実行されていると仮定するので、したがって deltaTime
常に1/30です。
これでゲームが変更されました deltaTime
常に1/30ではありませんが、可変になります。どうすれば組み込むことができますか deltaTime
の計算で x
「1秒あたりの効果」を同じに保つために?
そして何について
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を初期値とし、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
, 、しかし、それはすべての値に対して機能するはずです。
他のヒント
x = x * powf(0.9, deltaTime / (1.0f / 30.0f))
所属していません StackOverflow