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.
Der beste Weg, um Ihr Spiel auf allen Systemen gleich schnell laufen zu lassen, ist die Verwendung eines festen Zeitschritts.
Mit einem festen Zeitschritt wird das Spiel unabhängig von der Renderrate immer mit der gleichen Rate aktualisiert. Bei Verwendung der Interpolation sieht es auch dann flüssig aus, wenn die Renderrate viel höher als die Aktualisierungsrate ist.
Hier finden Sie eine Antwort mit Ressourcen zum Implementieren eines festen Zeitschritts.
Halbfester oder vollfester Zeitschritt?
Hier ist eine Antwort, die erklärt, wie Interpolation für Bewegung und Transformationen implementiert wird.
Wie interpoliere ich zwischen zwei Spielzuständen?
quelle
Nein sollte es nicht. Eine Art von Timing, die Sie in Ihrem Spiel ausführen können, ist das rahmenbasierte Timing. Die Idee ist, die Spielschleife so schnell laufen zu lassen, wie Ihr Computer sie ausführen kann, wodurch Sie das beste Gesamterlebnis haben und die Geschwindigkeit steuern, mit der Ihre Simulation ausgeführt wird. Jetzt haben Sie Ihre Aktualisierung vom Rendern entkoppelt und haben die genaue Kontrolle darüber.
In diesem Szenario kann Ihre Spieleschleife auf einem Computer mit beispielsweise 60 fps und auf einem anderen Computer mit 45 fps oder etwas anderem ausgeführt werden. Ihre Simulation wird jedoch immer mit der genau festgelegten Geschwindigkeit zwischen ihnen ausgeführt.
Ihr Spiel ist jetzt in zwei Abschnitte unterteilt, einen zum Rendern Ihrer Grafiken und einen zum Aktualisieren Ihrer Simulation. Sie stellen Ihre gewünschte Simulationsrate zu Beginn des Spiels ein und erhalten oben in Ihrer Spielschleife die verstrichene Zeit. Beachten Sie, dass diese verstrichene Zeit eine Zeitgröße ist, die auf Ihrer gewünschten Simulationsrate basiert. Dieser Wert wird dann als Multiplikator für Ihre Spielobjekte verwendet, um sie auf / oder sehr nahe an Ihrer gewünschten Simulationsrate zu halten. Wenn Sie beispielsweise möchten, dass Ihre Simulation mit 30 fps aktualisiert wird und Ihre Spieleschleife derzeit mit 60 fps ausgeführt wird, beträgt der Wert für die verstrichene Zeit für diesen Frame 0,5. Wenn Sie dies mit der Geschwindigkeit Ihrer sich bewegenden Objekte multiplizieren, bewegen sie sich mit 30 fps. Wissen Sie, dass die Geschwindigkeit Ihrer Spielschleife von Bild zu Bild stark variiert und das Timing der Frame-Basis Ihre Simulation mit einer bekannten und vorhersehbaren Geschwindigkeit laufen lassen kann.
Das Ergebnis ist eine seidenweiche Animation.
quelle