Чтобы сэкономить пропускную способность в моей многопользовательской игре , я не обновляю каждый объект каждый тик сервера, вместо этого у каждого объекта есть updateRate, который сообщает игре, что этот объект будет обновляться после каждого тика X-сервера.
Когда я получаю сообщение об обновлении для объекта, я рассчитываю время, которое я ожидаю следующего обновления:
origin = serverCurrentPosition
diff = serverNextPosition - origin
arriveTime = now + timeBetweenTicks * updateRate
Когда я рисую объект, я вычисляю время, оставшееся до следующего обновления, и интерполирую позицию соответственно:
step = 100 / timeBetweenTicks * updateRate
delta = 1 - step * ((arriveTime - now) / 100)
position = origin + diff * delta
Это работает ... но на рисунке все еще есть немного дрожания, хотя в моей теории все должно работать хорошо, так как масштабирование должно заботиться о некоторой задержке, не так ли?
Таким образом, вопрос здесь заключается в том, это лучший подход? Должен ли я поставить фактическое отставание в вычислениях? Если так, как бы я это сделал? Я провел несколько экспериментов, но дрожание только ухудшалось.