Ändern zu verwenden Delta-Zeit multipliziert Berechnung
-
28-09-2019 - |
Frage
function(deltaTime) {
x = x * FACTOR; // FACTOR = 0.9
}
Diese Funktion wird in einem Spiel Schleife aufgerufen. Zunächst nimmt an, dass es bei einem konstanten 30 FPS läuft, so deltaTime
immer 1/30 ist.
Jetzt ist das Spiel verändert, so deltaTime
nicht immer 1/30 ist, wird aber variabel. Wie kann ich deltaTime
bei der Berechnung des x
nehme die „Wirkung pro Sekunde“ zu halten, das gleiche?
Und was ist
function(deltaTime) {
x += (target - x) * FACTOR; // FACTOR = 0.2
}
Lösung
x = x * Math.pow(0.9, deltaTime*30)
Bearbeiten
Für Ihr neues Update:
x = (x-target) * Math.pow(1-FACTOR, deltaTime*30) + target;
Um zu zeigen, wie ich es:
sein Sei x0 der Anfangswert, und XN den Wert nach n / 30 Sekunden betragen. Auch T = Ziel, F = Faktor lassen. Dann gilt:
x1 = x0 + (T-x0)F = (1-F)x0 + TF
x2 = (1-F)x1 + TF = (1-F)^2 * x0 + (1-F)TF + TF
Weiter mit x3, x4, ... zeigen:
xn = (1-F)^n * x0 + TF * (1 + (1-F) + (1-F)^2 + ... + (1-F)^(n-1))
Sie nun die Formel für die Summe einer geometrischen Folge ersetzt wird das Ergebnis geben oben. Das ist wirklich nur beweist das Ergebnis für integer n
, aber es sollte für alle Werte arbeiten.
Andere Tipps
x = x * powf(0.9, deltaTime / (1.0f / 30.0f))