Nein, die Bildrate sollte die Geschwindigkeit nicht beeinflussen - das Gameplay hängt vollständig von der Videoleistung ab, was katastrophal ist (selbst wenn Sie die Geschwindigkeit begrenzen, können Sie keine Personen steuern, deren Systeme das Spiel mit halber Geschwindigkeit ausführen).
Dieses Problem tritt auf, weil Sie etwas falsch gemacht haben: Ihre Aktualisierungs- / Renderroutinen werden so schnell wie möglich nacheinander ausgeführt, wobei Objekte pro Anruf aktualisiert werden (wenn also die Anrufgeschwindigkeit abweicht, auch ihre).
Ein zeitbasierter Ansatz
Der richtige Weg, dies zu tun, besteht darin, Objekte pro Sekunde zu aktualisieren .
Stellen Sie sich zum Beispiel eine Kugel vor: Im Moment weiß es wahrscheinlich, wie viel es pro Frame bewegen muss. Sie müssen dies in die Bewegung pro Sekunde umwandeln . Wie Sie das machen, ist eigentlich nicht zu kompliziert.
Erstens wird Ihre Kugel mehr als einmal pro Sekunde aktualisiert, daher müssen wir sie tatsächlich alle paar Millisekunden aktualisieren. Jedes Mal, wenn Sie Ihre Physik-Engine aktualisieren, ist seit der letzten Aktualisierung eine bestimmte Anzahl von Millisekunden vergangen: Dies wird als Delta-Zeit bezeichnet , normalerweise kurz dt . Der dt wird vor dem Aktualisieren aller Objekte bestimmt, dann werden alle Objekte mit demselben dt aktualisiert, um synchron zu bleiben. Das dt wird im Allgemeinen als Argument an jedes Objekt in seinem Aktualisierungsaufruf übergeben.
In der Festschrittphysik ist der dt eine feste Zahl, während in der Variablenschrittphysik der dt abhängig von der tatsächlichen Zeitspanne seit der letzten Aktualisierung (daher ihre Namen) variiert.
Das bringt uns zurück zu Ihrer Kugel. Es wurde angewiesen, mit einem dt von 16 Millisekunden zu aktualisieren, für eine Physik-Engine, die 60 Mal pro Sekunde aktualisiert wird: Wenn sich die Kugel 12 Meter pro Sekunde bewegt, bewegen Sie sie (16.0/1000.0) * 12.0
in diesem Update Meter.