我正在开发2D服务器-客户端多人游戏引擎(您可以在此处尝试)。它使用WebRTC DataChannel
。(连接是对等的,但主机对等方仍充当服务器。)
除了连接性之外,最大的问题是本地输入预测。我们照常做:在按键时,玩家立即移动,告诉主机按下了哪些键,从主机接收回数据并将其与历史位置进行比较。如果存在差异,则随时间校正位置。即使ping高,这在低丢包率或PDV情况下也能很好地工作。
如果存在损耗或PDV,则偏差可能会更大。我认为这是因为,如果第一个指示输入变化的数据包被延迟或丢弃,主机将稍后发现,并在其本地输入条件显示之前开始更改该玩家。
如果玩家正在移动,我们会提高校正的幅度,因为它不太明显。这似乎弥补了开始移动和移动时的空白。但是,如果它们突然停止,则更明显。然后,如果PDV或丢失表示主机认为主机稍后停止,则主机超调,发送回数据,表示主机距离主机稍远,而校正会使播放器稍微偏离一点。在不稳定的连接中,玩家通常在停下来后通常会漂移。
我没有在其他游戏中注意到这一点。如何缓解这种情况?