gpt4 book ai didi

network-programming - 游戏网络物理碰撞

转载 作者:行者123 更新时间:2023-12-03 06:06:07 25 4
gpt4 key购买 nike

如何在网络游戏的典型客户端/服务器设置中模拟两个客户端控制的车辆(合理地)碰撞?我确实读过this eminent blog post一般而言,关于如何进行分布式网络物理(没有传统的客户端预测),但这个问题具体是关于如何处理拥有的对象的碰撞。

示例

假设客户端 A 比服务器领先 20 毫秒,客户端 B 比服务器领先 300 毫秒(同时计算延迟和最大抖动)。这意味着当两辆车相撞时,两个客户端都会看到对方落后 320 毫秒 - 与另一辆车的速度方向相反。在瑞典高速公路上面对面意味着 16 米/17.5 码的差异!

不应该尝试什么

几乎不可能推断出位置,因为我还有非常复杂的车辆,到处都是关节和车身,而这些车辆又具有线性和角度位置、速度和加速度,更不用说来自用户输入的状态。

最佳答案

我不知道有什么完美的解决方案,而且我感觉不存在完美的解决方案。即使您可以准确预测车辆的 future 位置,您也无法预测用户操作控件的方式。因此,问题归结为最大限度地减少客户端/服务器延迟的负面影响。考虑到这一点,我将从principle of least astonishment的位置来处理这个问题。 (摘自维基百科):

In user interface design, the principle of least astonishment (or surprise) states that, when two elements of an interface conflict, or are ambiguous, the behaviour should be that which will least surprise the human user at the time the conflict arises.

在您的示例中,每个用户看到两辆车。他们自己的,还有其他玩家的。用户希望自己的车辆能够完全按照他们控制的方式运行,因此我们无法进行模拟的这方面。但是,用户无法确切知道其他用户如何控制他们的车辆,我会利用这种模糊性来向用户隐藏延迟。

基本思想如下:

  1. 服务器必须对即将发生的冲突做出决定。碰撞检测算法不必 100% 完美,只需足够接近以避免明显的不一致即可。
  2. 一旦服务器确定两辆车将发生碰撞,它就会向两个用户中的每一个用户发送一条消息,指示碰撞即将发生。
  3. 在客户端A上,车辆B的位置被调整(现实地)以保证碰撞发生。
  4. 在客户端B上,车辆A的位置被调整(现实地)以保证碰撞发生。
  5. 在碰撞发生后,可以根据需要调整每辆车的位置,以便最终结果与游戏的其余部分保持一致。这部分正是MedicineMan在his answer中提出的。 。

这样,每个用户仍然可以完全控制自己的车辆。当碰撞发生时,不会出现意外。每个用户都会看到另一辆车向他们驶来,并且他们仍然会有实时模拟的感觉。好处是该方法在低滞后条件下 react 良好。如果两个客户端与服务器的连接都是低延迟的,则调整量将会很小。当然,随着滞后的增加,最终结果会变得更糟,但这是不可避免的。如果有人在有几秒钟延迟的连接上玩快节奏的 Action 游戏,他们根本无法获得完整的体验。

关于network-programming - 游戏网络物理碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/835443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com