为了节省多人游戏的带宽,我不会在每个服务器滴答声中更新每个对象,而是每个对象都有一个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
它可以工作...但是在图形中仍然有些抖动,尽管按照我的理论,每件事都可以解决,因为缩放应该照顾一些滞后,应该吗?
所以这里的问题是,这是最好的方法吗?我应该在计算中加入实际滞后吗?如果是这样,我该怎么做?我做了一些实验,但抖动只会变得更糟。