client-server - FPS 多人游戏的服务器更新其客户端的一般策略是什么?

标签 client-server multiplayer frame-rate

我和一个 friend 正在讨论 FPS 服务器如何更新连接到它的客户端。我们看了video一个人在 Battlefield: Bad Company 2 作弊看到它如何突出屏幕上敌人的位置,这让我们思考。

他的论点是服务器只用与客户端直接相关的信息更新客户端。 IE。如果敌方玩家距离客户端太远或出于效率原因不在客户端的视线范围内,服务器将不会发送有关敌方玩家的信息。但他不确定——他举了一个躲在岩石后面的人的例子,看不到任何人。如果玩家突然出现在他视线内有三个玩家的地方,那么在服务器传输必要的信息时,他们在屏幕上呈现之前会有 50 毫秒的延迟。

我的论点正好相反:服务器将每个玩家的所有信息发送给客户端,并让客户端整理出哪些是允许的,哪些是不允许的。我认为服务器将所有内容发送给客户端并让客户端完成繁重的工作实际上在计算上会更便宜,可以这么说。我还认为这就是作弊程序的工作原理 - 它们拦截服务器数据包,获取敌人的位置,然后在客户端的 View 中显示它们。

所以问题是:现代第一人称射击游戏服务器采用哪些一般策略或策略来保持其客户端更新?

最佳答案

这是你的立场和你 friend 的立场之间的妥协,每场比赛都会对此做出稍微不同的决定,以实现他们想要的权衡。服务器可能会尽量不发送比它需要更多的信息,例如。执行距离检查,但不可避免地会发送一些可以被利用的信息,例如发送岩石后面敌人的位置,原因很简单,因为服务器每次计算准确的视线都太昂贵了,以及也适用于您提到的延迟问题。

通常你会发现 FPS 游戏确实比其他游戏更倾向于“泄漏”更多信息,因为它们更关心流畅的游戏体验,需要更快和更规律的更新率。此外,与 MMO 不同的是,如果 FPS 玩家发现他们的游戏被作弊破坏了,他们通常可以自由地转移到不同的服务器。

一些补充阅读:

  • Multiplayer and Network Programming Forum FAQ @ Gamedev.net
  • Networking for Game Programmers @ GafferOnGames
  • Source Multiplayer Networking @ Valvesoftware.com
  • 关于client-server - FPS 多人游戏的服务器更新其客户端的一般策略是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2845416/

    相关文章:

    javascript - WebGL 中的低 FPS(作为 2d 工作)

    在 Linux 机器中使用套接字发送和接收文件时出现 C++ 问题

    java - 尝试使一个简单的回显客户端服务器程序在两台计算机之间工作

    c# - Unity Networking中如何知道客户端和服务器是否已连接

    gstreamer - 在 Gstreamer 的 C 源代码中显示 FPS

    android - Android SurfaceView 的低 FPS

    sql-server - 限制服务器端返回的行数(强制限制)

    c# - 如何使用套接字将简单消息从 WinRT 客户端(.NET 4.5)发送到桌面服务器(.NET 4.0)?

    java - 多人 2D 游戏中的数据结构 (Java)

    python - 使用 Python 创建 2 人游戏