2
如何为联网的实时游戏实现游戏状态快照系统?
我想创建一个简单的客户端-服务器实时多人游戏作为我的网络课程的一个项目。 我已经阅读了很多有关实时多人网络模型的文章,并且了解了客户端和服务器之间的关系以及滞后补偿技术。 我想做的事情类似于Quake 3网络模型:基本上,服务器存储了整个游戏状态的快照;在从客户端接收到输入后,服务器将创建一个反映更改的新快照。然后,它计算新快照和最后一个快照之间的差异,并将它们发送给客户端,以便它们可以同步。 在我看来,这种方法确实很可靠-如果客户端和服务器之间具有稳定的连接,则仅发送少量必需的数据以保持它们同步。如果客户端不同步,则也可以请求完整快照。 但是,我找不到实现快照系统的好方法。我发现很难摆脱单人编程架构,并思考如何以以下方式存储游戏状态: 所有数据与逻辑分离 可以计算游戏状态快照之间的差异 通过代码仍然可以轻松操纵游戏实体 快照类如何实现?实体及其数据如何存储?是否每个客户实体都有一个与服务器上的ID匹配的ID? 快照差异如何计算? 总的来说:游戏状态快照系统将如何实现?