多人游戏如何同步其状态? 第1部分

多人游戏的问题

在多人游戏中,最复杂的问题之一是使所有玩家的状态与服务器状态保持同步。 互联网上有一些关于该主题的好文章。 但是,某些细节到处都是,这可能会使游戏编程领域的初学者感到困惑。 我希望我可以在这篇文章中澄清一下。

我将介绍此问题空间中常用的一些技术。

在进入问题之前,让我们先概述一下多人游戏的总体运作方式。

通常,游戏程序需要模拟以下内容:

时间和玩家投入方面的环境变化

游戏是有状态程序,因此它取决于时间(是真实时间还是逻辑时间)。 例如,PACMAN正在模拟一个环境,幽灵将不断移动。

多人游戏也不例外,但是由于多人游戏之间的互动,复杂性更高。

让我们以经典的Snake游戏为例:

假设我们使用服务器-客户端设置。 核心游戏逻辑是这样的

  • 读取用户输入(可以是[←,↑,→,↓]之一)来更改蛇的方向。
  • 应用用户输入(如果有); 这改变了蛇的方向。
  • 将蛇移动1个单位空间
  • 检查是否有任何蛇撞到敌人/墙壁/自己身上,然后将其从游戏中移除。
  • 重复!

该逻辑将在服务器端以固定的间隔运行。 如下所示,每个循环称为一个frame或一个tick

最简单的客户端将监听服务器更新,并将接收到的每个帧呈现给播放器。