插值抖动

我正尝试在多人游戏中插入玩家,如下所示:

var lastTime = now - (1000 / config.serverUpdateRate); for (var i = 0; i < players.length; ++i) { tmpObj = players[i]; var total = tmpObj.t2 - tmpObj.t1; var fraction = lastTime - tmpObj.t1; var ratio = fraction / total; tmpObj.x = UTILS.lerp(tmpObj.x1, tmpObj.x2, ratio); tmpObj.y = UTILS.lerp(tmpObj.y1, tmpObj.y2, ratio); } 

服务器更新率是服务器发送玩家位置的频率。 x2是最新的位置,x1是上一次更新的位置。

现在这工作正常我的本地和空的服务器上。 但是一旦游戏服务器上有大约60个人,它就开始结结巴巴。 我认为这是因为这个职位的速度不一致。 我怎样才能调整我的插值?

你可以在这里看到这个问题: http : //moomoo.io

我试图简单地插入,但是运动感觉太浮动。 在这种情况下,客户端预测也不是一个选项

我怀疑有任何治疗插值魔术…

您可以尝试将所有客户端的时间与一个或多个时间服务器进行同步,然后在包中embedded一个时间戳,并根据此时间间隔/外推移动。 那么传输时间是否不稳定也无关紧要。

由此你不改变电脑时钟,只是计算和使用之间的偏移(本地水晶和频率)和同步的世界时间。 你应该得到几毫秒的准确度。 PC时钟通常每24小时有一个0 …几秒的误差,所以有时可能需要重新同步。

本地晶体是稳定和固定的(例如Windows中的QueryPerformance API)。 Windows在宣布时钟时间时会“延长”(调整时间较长),所以“时钟时间”本身是无用的 – 必须下到硬件。