Um in meinem Multiplayer-Spiel Bandbreite zu sparen , aktualisiere ich nicht jedes Objekt bei jedem Server-Tick, sondern jedes Objekt hat eine updateRate, die dem Spiel mitteilt, dass dieses Objekt voraussichtlich bei jedem X-Server-Tick aktualisiert wird.
Wenn ich eine Aktualisierungsnachricht für ein Objekt erhalte, berechne ich den Zeitpunkt, zu dem die nächste Aktualisierung eintrifft:
origin = serverCurrentPosition
diff = serverNextPosition - origin
arriveTime = now + timeBetweenTicks * updateRate
Wenn ich das Objekt zeichne, berechne ich die verbleibende Zeit bis zur nächsten Aktualisierung und interpoliere die Position entsprechend:
step = 100 / timeBetweenTicks * updateRate
delta = 1 - step * ((arriveTime - now) / 100)
position = origin + diff * delta
Es funktioniert ... aber es gibt immer noch ein bisschen Jitter in der Zeichnung, obwohl in meiner Theorie alles gut funktionieren sollte, da die Skalierung eine gewisse Verzögerung ausgleichen sollte, oder?
Die Frage hier ist also, ist dies der beste Ansatz? Soll ich die tatsächliche Verzögerung in die Berechnung einbeziehen? Wenn ja, wie würde ich das machen? Ich habe einige Experimente durchgeführt, aber der Jitter wurde nur schlimmer.