Aby zaoszczędzić przepustowość w mojej grze wieloosobowej , nie aktualizuję każdego obiektu co tik serwera, zamiast tego każdy obiekt ma updateRate, który informuje grę, że ten obiekt ma być aktualizowany co tik X serwera.
Kiedy otrzymuję komunikat o aktualizacji dla obiektu, obliczam czas, kiedy spodziewam się następnej aktualizacji:
origin = serverCurrentPosition
diff = serverNextPosition - origin
arriveTime = now + timeBetweenTicks * updateRate
Podczas rysowania obiektu obliczam czas pozostały do następnej aktualizacji i odpowiednio interpoluję pozycję:
step = 100 / timeBetweenTicks * updateRate
delta = 1 - step * ((arriveTime - now) / 100)
position = origin + diff * delta
Działa ... ale na rysunku wciąż jest trochę drgania, chociaż w mojej teorii wszystko powinno działać dobrze, ponieważ skalowanie powinno zająć pewną ilość opóźnienia, prawda?
Pytanie brzmi więc, czy to najlepsze podejście? Czy powinienem umieścić rzeczywiste opóźnienie w obliczeniach? Jeśli tak, jak mam to zrobić? Przeprowadziłem kilka eksperymentów, ale drgania tylko się pogorszyły.