質問

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top