服务器在每次tick或者每隔一次tick发送一个"ServerClock"给客户端。

客户端将这个值与自己的"ClientClock"(此时游戏启动时为0)比较。

如果"ServerClock"与"ClientClock"差值超过了某个阈值(比如50ms),则客户端直接设置"ClientClock"等于"ServerClock"。

然而,如果差值很小(比如说50ms以下),那就是因为网络抖动/数据包抖动的缘故,且需要根据网络情况来调整"ClientClock"的值到"ServerClock"。这个过程可能会导致加速/减速,但这无法避免,仅仅是网络本质。

我在应用游戏中采纳了NTP中的两个原则,即使我本身也没有使用NTP。

接着,客户端使用公式RenderTime = ClientClock – InterpolationTime 来通过 RenderTime(加上 FrameTime 的值)来进行插值计算:

问题的描述是否准确,还是我遗漏了一个核心的原理?