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

标签 vb.net sockets time synchronization

因此,我的项目是一个在线RTS(实时策略)游戏(VB.NET),在配对服务器匹配2位玩家之后,在套接字通信(TPC)中将一位玩家分配为主机,另一位玩家作为客户端。

我的设计是服务器和客户端仅记录和发送有关输入的信息,并且游戏会根据来自输入的信息来处理所有动画/ Action 。

这很有效,除非涉及到服务器和客户端的游戏都以相同的速度运行。无论我将客户端和服务器都放在同一台计算机上,还是将不同的计算机用作服务器/客户端,游戏中的操作似乎都以不同的速度处理。这显然对于游戏正常运行至关重要。

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

所以我的问题是:

  • 如何在仅发送输入的同时同步游戏? (如果可能)
  • 在这种情况下,还有哪些其他设计可行?它们如何工作?

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

    在此先感谢您提供的任何帮助,我的项目真的取决于它!

    最佳答案

    不能保证计时器以准确的设定速度计时。他们滴答声的速度可能会受到系统(尤其是您的过程)的繁忙程度的影响。但是,虽然您无法使计时器以正确的速度计时,但您可以准确地计算自某个特定时间点(例如启动计时器的时间点)以来已经过了多长时间。像这样测量时间的最简单方法是使用Stopwatch类。

    当您以这种方式进行操作时,这意味着您没有一个顺畅的事件顺序,例如,某个计时器的滴答声使某事物移动一个像素,但是,您却拥有一条路径,使您知道某事物正在从一个地方移动到另一个地方。在指定的时间范围内进行另一个设置,然后根据秒表给出当前的确切时间,则可以确定该对象在该路径上的当前位置。因此,在运行速度更快的系统上,事件将显得更平滑,但是在运行速度较慢的系统上,事件将以更跳跃的方式发生。

    关于vb.net - 如何在在线RTS游戏中同步主机和客户端的游戏? (VB.NET),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20952059/

    相关文章:

    java - 软件电话/voip上有任何源代码或教程吗?

    c++ - QT中如何不断读取UDP包?

    javascript - 计算hh中的时间差:mm:ss with simple javascript/jquery

    iOS - backgroundTimeRemaining 值未显示预期值

    .net - 如何强制 MSBuild 编译为 32 位模式?

    vb.net - 将 AdaBoost(Boosting) 与 Accord.Net 结合使用

    .net - 从 VB.NET 中的 FTP 文件夹下载所有文件和子目录

    .net - 如何使用异步方法加载数据库数据并保持 UI 响应

    java - "Best"具有 ODBC 和套接字的基于浏览器的应用程序的语言/架构? (主观)

    python - 在pygame中更新一个数字