与游戏服务器同步物理

时间:2012-09-01 06:41:49

标签: networking synchronization game-physics multiplayer

我想用物理引擎编写一个多人游戏。客户端使用物理引擎进行计算并及时显示结果,但当然,服务器也需要模拟整个事物。

Afaik,客户通常会向服务器发送速度和位置。我的想法是将按键发送到服务器。

发送位置/速度:

  • 服务器需要插入运动。
  • 我不知道如何用这些数据提供物理引擎。
  • 插值时,结果可能不准确。

发送按键

  • 我可以像在客户端上一样(通过按键)提供服务器的物理。这意味着更少的代码!
  • 无需插值。

那么,我的想法可能有什么不好?为什么不在游戏中使用(afaik)?

2 个答案:

答案 0 :(得分:1)

我非常确定在服务器上计算物理在服务器上太重了。特别是有更多的人。虽然这可能使客户端更快,但服务器将成为瓶颈。

答案 1 :(得分:1)

它没有被用于两个主要原因 - 一个由用户1640050概述,另一个远远更大:

延迟计算 - 你仍然需要在客户端和服务器端计算它,因为在互联网上,服务器和客户端之间将存在20ms-500ms的延迟。通常情况下,双方都会计算物理,并且通过网络发送动作(不是真正的按键),并以客户的时间为时间戳。然后,服务器再次进行计算,计算客户端之间的任何交互,并将轨迹的更正发送回客户端。

通过这种方式,客户可以在没有任何服务器反馈的情况下计算游戏的实时演变,如果服务器通知客户关于其他玩家的活动(通常是动作和动作结果的组合),则会更正它(更常见) )。

这样做是为了阻止各种各样的作弊行为 - 客户知道对手的引擎推力越少,添加未经授权的mod和作弊就变得越困难 - 这样客户就知道它自己的发动机推力,以及对手的位置/速度/加速度,但不知道它是如何复活的。