发送播放器速度更改时如何同步客户端和服务器?


10

我正在执行客户端预测。大多数说明都假定客户端发送诸如“ 将我的播放器上移1个位置 ”之类的消息。如果我发送诸如“ 将播放器的速度设置为x ”之类的消息怎么办?

说明性图形; 显示一段时间内已发送的消息以及客户端和服务器上的已计算位置

在客户端上,播放器在服务器之前设置自己的速度(通过客户端预测),导致两者不同步。即使考虑平均延迟,此问题仍然存在。

我该如何解决?

Answers:


8

您应该发送冗余数据,这意味着发送位置和速度。即使您不同步,您也拥有位置和速度的事实使您可以使用插值功能来校正轨迹。

然后使用一些技巧,例如延迟动画,加速等,可以隐藏延迟。

编辑:我认为服务器是权威的。


感谢您的回答。是的,服务器是权威的,但是即使我以自己的速度发送冗余数据,客户端也可以纠正他的错误,但是我经常读到诸如“如果客户端/服务器对其实体使用共享代码,则永远不会真正发生预测错误”之类的东西,但是在我的情况下,它们总是会稍微发生,这会导致卡住。
Blu3 2012年

1
@ user13842,客户端将始终不同步,您应根据服务器发送给您的信息,如Thelvyn所说,更正客户端的位置和速度。这样,除非您的客户端完全不同步,否则您就不会陷入僵局,那么您将不得不捕捉值,因为校正会花费太多时间。
dreta 2012年

这是使用插值功能的主要原因。您无法避免延迟,因此必须以平滑的方式纠正运动。客户端和服务器模拟世界,但是客户端必须收听服务器并执行更正。Source Engine网络中使用的一些技术:developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
Thelvyn 2012年

它也在本次Google演讲中得到了简要提及,它应该可以在youtube.com/watch?v=Prkyd5n0P7k#t=18m47s中
启发-dreta

Ive针对此特定问题找到了另一种解决方案。我添加了客户端对每个数据包应用其输入的时间。意思是#1的时间为0,第二时间为100。现在服务器知道客户端在时间:100而不是之前按下了它的按钮。
Blu3 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.