如何在在线RTS游戏中同步主机和客户端的游戏? (VB.NET)

时间:2014-01-06 14:25:28

标签: vb.net sockets time synchronization

所以我的项目是一个在线RTS(实时战略)游戏(VB.NET),其中 - 在匹配服务器匹配2个玩家之后 - 一个玩家被分配为主机而另一个被作为套接字通信(TPC)中的客户端。

我的设计是服务器和客户端只记录和发送有关输入的信息,游戏根据输入信息处理所有动画/动作。

这很有效,除非让服务器和客户端的游戏以相同的速度运行。看起来游戏中的操作是以不同的速度处理的,无论我是在同一台计算机上同时拥有客户端和服务器,还是使用不同的计算机作为服务器/客户端。这对游戏来说显然至关重要。

由于游戏有时会有300-500个单位,我认为从服务器/客户端每秒发送10个整个游戏状态是太多了。

所以我的问题是:

  1. 如何在仅发送输入时同步游戏? (如果可能的话)

  2. 在这种情况下还有哪些其他设计可行,以及它们如何运作?

  3. (在VB.NET中我使用计时器进行操作,这样每100ms(计时器间隔)一个角色移动并改变动画,以及类似的东西)

    提前感谢您对此问题的任何帮助,我的项目真的取决于它!

1 个答案:

答案 0 :(得分:0)

不能保证定时器完全以设定的速率打勾。它们打勾的速度会受到系统繁忙程度,特别是您的过程的影响。但是,虽然您无法使计时器以准确的速度打勾,但您可以精确计算自某个特定时间点以来的时间长度,例如您启动计时器的时间点。衡量时间的最简单方法是使用Stopwatch类。

当你这样做的时候,这意味着你没有平滑的事件顺序,例如,每个计时器滴答一个像素移动一个像素,而是你有一个路径,你知道某些东西正在从在指定的时间范围内将一个地方放到另一个地方然后,根据秒表给出您当前的确切时间,您可以确定该物体沿该路径的当前位置。因此,在运行速度更快的系统上,事件看起来会更加平滑,但在运行速度较慢的系统上,事件会以更加跳跃的方式发生。