多人游戏的问题
在多人游戏中,最复杂的问题之一是使所有玩家的状态与服务器状态保持同步。 互联网上有一些关于该主题的好文章。 但是,某些细节到处都是,这可能会使游戏编程领域的初学者感到困惑。 我希望我可以在这篇文章中澄清一下。
我将介绍此问题空间中常用的一些技术。
- 如何创建独立游戏,同时保持10个小时的工作,做丈夫和父亲–第1部分
- #100daysofcode第27天-动画
- Spieleprogrammierung mit Pythons Turtle-Modul(Teil 2)
- 游戏2.0
- Roblox网络所有权如何工作
在进入问题之前,让我们先概述一下多人游戏的总体运作方式。
通常,游戏程序需要模拟以下内容:
时间和玩家投入方面的环境变化
游戏是有状态程序,因此它取决于时间(是真实时间还是逻辑时间)。 例如,PACMAN正在模拟一个环境,幽灵将不断移动。
多人游戏也不例外,但是由于多人游戏之间的互动,复杂性更高。
让我们以经典的Snake游戏为例:
假设我们使用服务器-客户端设置。 核心游戏逻辑是这样的
- 读取用户输入(可以是[←,↑,→,↓]之一)来更改蛇的方向。
- 应用用户输入(如果有); 这改变了蛇的方向。
- 将蛇移动1个单位空间
- 检查是否有任何蛇撞到敌人/墙壁/自己身上,然后将其从游戏中移除。
- 重复!
该逻辑将在服务器端以固定的间隔运行。 如下所示,每个循环称为一个frame
或一个tick
最简单的客户端将监听服务器更新,并将接收到的每个帧呈现给播放器。