我一直在阅读有关当今存在的各种形式的多人游戏的信息。简而言之,我认为行业标准方式涉及以下内容:
- 在客户端机器/设备上为每个客户端运行物理
- 将此物理的输入数据发送到服务器(可能是另一个客户端运行“服务器”会话以及他们自己的客户端数据)
- 服务器处理此数据以确定客户端是否进行了合法移动,如果不是,则强制客户端同步到它的指令(橡皮筋)。
- 服务器将其他客户端的历史数据转发给每个客户端进行模拟。
- 从每个客户的角度来看,有效的结果是在玩现在的自己,同时看到过去的其他客户。
- 通过“倒回”游戏状态在服务器上执行命中检测,以查看是否在时间戳上发生了事件,受影响的玩家在该时间点所处的位置。
目前,我使用纯航位推算系统。从每个客户端收集输入并在每个客户端上计算物理。这可行,但是由于对玩家先前位置/速度/方向的依赖性不够高,因此单位很快就会失去同步和橡皮筋。又名:他们可以自由地快速、频繁地改变方向和速度。
话虽如此,我该如何解决这个问题?
我的客户端模拟器是否应该有效地为每个玩家收集多个数据点并在这些节点之间插入渲染?(即:每个客户都有关于所有其他客户历史头寸的多个数据点)。
因此,我的客户的模拟器绘图播放器 B 在时间 0 的队列中会有位置 X0、X1、X2、X3。在时间 0 -> 时间 1 的转换之间,我知道起始相关值(位置、速度、方向等)以及他应该在哪里时间 1。
在这些已知的历史时间和数据点之间插入这些值的解决方案是什么?
谢谢!
瑞安