【问题标题】:How to synchronize host's and client's games in an online RTS game? (VB.NET)如何在在线 RTS 游戏中同步主机和客户端的游戏? (VB.NET)
【发布时间】:2014-01-06 14:25:28
【问题描述】:

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

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

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

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

所以我的问题是:

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

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

(在 VB.NET 中,我使用计时器进行操作,例如每 100 毫秒(计时器间隔)一个角色移动并更改动画,诸如此类)

在此先感谢您对此问题的任何帮助,我的项目真的依赖它!

【问题讨论】:

    标签: vb.net sockets time synchronization


    【解决方案1】:

    不保证计时器以完全设定的速率滴答作响。它们滴答的速度可能会受到系统繁忙程度的影响,尤其是您的进程的繁忙程度。但是,虽然您无法让计时器以准确的速度计时,但您可以准确计算自某个特定时间点(例如您启动计时器的时间点)以来的时间。像这样测量时间的最简单方法是使用Stopwatch 类。

    当你这样做时,这意味着你没有一个平滑的事件顺序,例如,某物在每个计时器滴答声中移动一个像素,而是你有一条路径,你知道某物正在从在指定的时间跨度内从一个地方到另一个地方,然后,根据秒表给定您当前的确切时间,您可以确定该对象沿该路径的当前位置。因此,在运行速度较快的系统上,事件会显得更流畅,但在运行速度较慢的系统上,事件会以更跳跃的方式发生。

    【讨论】:

    • 感谢您的回答,这是问题答案的一部分。我现在意识到我必须轮流运行游戏,并让每个玩家完成一轮,然后再继续。但是,我可以使用秒表来计算 ping 和性能,以通过猜测性能和 ping 并让每个客户端表现得最差以保持均匀的速度,从而为用户提供流畅的体验。我希望我能解决这个问题,否则我会带着更多问题回来:) 谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 2013-01-31
    • 1970-01-01
    相关资源
    最近更新 更多