我正在制作一个基于磁贴的2D RPG(自上而下,32x32像素)。玩家可以使用箭头键移动到任何相邻的图块。我发现它有点难于理解插值。客户端/服务器插值
我明白游戏中的方向可以突然改变,像航位推算这样的概念将毫无用处。
客户端预测正常工作,但是,当我从服务器收到有关其他客户端位置的不同语言的更新时,我很难理解这个概念。
例如,我的球员A.
目前,当玩家B移动,我收到他们的新位置,并从服务器的时间戳。在局域网连接上,这似乎按预期工作,并且玩家B立即在屏幕上移动,并进行正确的插值。我计算从服务器发送数据到接收数据的时间,并且每帧插入差值(16ms,60fps)。如果我有200ms的RTT,而玩家B有400ms的RTT,并且他们每250ms移动1个瓦片,我会在300ms后收到数据,所以我只能看到玩家B传送到新的瓦片。
我是否必须将其延迟时间添加到时间戳中,因此当我收到它时,时间戳匹配和动画顺利启动?
我在想这个吗?
谢谢。
编辑:我忘了提及服务器每隔50ms发送一次更新。
谢谢MMc,我想我现在对此了解得更清楚了。该服务器具有发送玩家的位置在每个服务器更新,即使一直没有其他输入,所以我会永远在客户端的每个时步过去和当前位置?如果一个客户端只在输入处理完毕时才发送数据,那么客户端可能会在几秒钟内收不到任何服务器更新,无论如何,我可以适当插入吗? – Max6701
如果你想推断,你可以使用你从前一对数据点计算出的增量,但是你需要使用外推位置作为当前数据,当你的服务器最终发送一个新的数据点时再次开始插值。如果使用来自服务器的前一位数据,那么显示的数据将是不连续的,因此使用外推法并减少随时间推移引发的任何错误通常是更好的解决方案。 – MMc