10 我正在执行客户端预测。大多数说明都假定客户端发送诸如“ 将我的播放器上移1个位置 ”之类的消息。如果我发送诸如“ 将播放器的速度设置为x ”之类的消息怎么办? 在客户端上,播放器在服务器之前设置自己的速度(通过客户端预测),导致两者不同步。即使考虑平均延迟,此问题仍然存在。 我该如何解决? networking client-server movement-prediction — 蓝光3 source
8 您应该发送冗余数据,这意味着发送位置和速度。即使您不同步,您也拥有位置和速度的事实使您可以使用插值功能来校正轨迹。 然后使用一些技巧,例如延迟动画,加速等,可以隐藏延迟。 编辑:我认为服务器是权威的。 — Thelvyn source 感谢您的回答。是的,服务器是权威的,但是即使我以自己的速度发送冗余数据,客户端也可以纠正他的错误,但是我经常读到诸如“如果客户端/服务器对其实体使用共享代码,则永远不会真正发生预测错误”之类的东西,但是在我的情况下,它们总是会稍微发生,这会导致卡住。 — 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年