我已经实现了一个服务器/客户端体系结构,其中所有状态更改都发送到该函数,验证并广播给所有连接的客户端。这很有效,但系统并没有保持游戏的客户端实例之间的同步。多人游戏同步
如果在服务器和特定客户端之间发生了5秒的延迟,那么他将在剩余客户端5秒后收到状态更改,从而导致游戏状态不同步。我一直在寻找各种方法来实现客户端之间的同步系统,但迄今为止还没有发现。
我是网络编程的新手,并不那么天真地认为我可以自己创造一个工作系统,而不用花费大量的时间。然而,我一直在想的是保持某种时间系统,因此每个状态变化都会连接到游戏中的特定时间戳。这样,当一个客户收到状态改变时,它会准确地知道游戏的哪个时期发生了改变,并且反过来能够关联滞后。这种方法存在的问题是,在那些时间滞后的游戏中,客户端会继续游戏,因此客户端将不得不及时回滚以更新状态更改,这肯定会变得混乱。
所以我正在寻找论文讨论的主题或解决它的算法。也许我对整个多人游戏系统的设计是有缺陷的,因为客户端的游戏实例不应该更新,除非从服务器接收到概念。现在客户只是在游戏循环中更新自己,假设任何状态都没有改变。
有趣的问题。 – Ian 2009-09-11 16:03:33
我相信你应该重新考虑接受的答案。 Havenard对于今天使用的航位推算法或任何其他滞后技术一无所知。游戏并非只是宣布“落后的球员应该接受他们的状况”;他们会努力隐藏延迟,以便让游戏更具可玩性。毕竟,如果我玩了一个游戏,那里的人们到处跳来跳去,我几乎不能玩,我会很快离开那个游戏。 – Ricket 2010-02-09 15:59:43