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
}
War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top