Was ist der beste Weg, um mit einer Situation umzugehen, in der ein Benutzer zwei oder mehr Monitore mit unterschiedlichen Auflösungen und vertikalen Synchronisationsintervallen hat?
Dies würde gelten, wenn ein Spiel einen festen Zeitschritt hat und im Fenstermodus ausgeführt wird: Wenn ein Monitor eine Bildrate von 60,056 und der andere eine Bildrate von 59,94 hat, wird die vertikale Synchronisierung letztendlich ihre Aufgabe nicht erfüllen, wenn die Das Spielfenster wird vom Hauptbildschirm auf einen anderen verschoben.
Zeitliches Aliasing tritt ebenfalls auf, da der Zeitschritt nicht richtig auf die andere Synchronisierungsrate abgestimmt ist. Wie gehen Spiele normalerweise mit diesem Problem um, wenn überhaupt?
n
in weniger als derO(n)
Komplexität (optimalO(1)
) konsistent berechnen können , gilt nichts von dem, was ich gesagt habe. Interaktive Simulationen funktionieren jedoch nicht so.Antworten:
Spiellogikschritte nicht haben , um mit Anzeigelogik synchronisiert werden, auch wenn Sie einen festen Zeitschritt verwenden.
Betrachten Sie einen Gameloop wie:
Es spielt keine Rolle, wie lange Ihre
draw()
Anrufe dauern. Solange Siedo_step()
weniger alstime_per_step
brauchen, wird Ihre Spiellogik nicht zurückfallen.quelle
X
logische Frames pro Sekunde fürY
grafische Frames pro Sekunde wünschenX != Y
, müssen Sie entweder dafür sorgen, dass die Logik bei den Grafiken bleibt (wiederholte und abgelegte Frames) oder die Grafiken bei der Logik bleiben (Zerreißen). Die andere Alternative ist das Erzwingen, dass die Logik mit Grafikgeschwindigkeit ausgeführt wird, was zu zeitlichem Aliasing führt. Keine Raketenwissenschaft hier.