如何同步多人游戏中的跳跃等动作?


11

我是新手游戏开发人员,并且我一直在研究多人游戏。我观察到总会有一些延迟,玩家总是会从过去的动作中获得更新。但是,有诸如航位推测法之类的技术可以处理延迟。我可以预测运动并使运动平稳。但是我将如何使动作同步,例如跳跃,停止行走等。

假设客户A在移动,他以100m / sec的速度在10.2时处于100m并发送了此信息。客户B稍后会收到此信息,设为10.4。因此,在客户端B,我可以使用预测并将客户端A放置在120m处。但是,如果客户在10.3跳到110m,该怎么办?我无法预测,并且由于我一直在使用预测,所以无法显示客户A的过去。

我可能根本不发送跳转动作来解决此问题。但是,如果我的游戏中存在一些空隙,玩家可以跌倒并死亡。因此,如果我不同步跳跃动作,其他玩家将观察到一个玩家在跑步,然后他陷入虚无,然后再次出现在屏幕上,破坏了视觉吸引力。

跳转只是一个例子,可能在许多情况下无法进行预测。因此,如何处理它们。这样的示例之一可以是像Awesomenauts这样的多人在线战斗竞技场游戏。


我对Multiplayer不太了解,因此无法给出正确的答案。但是根据我的选择,理想的设置是您的客户端多少有点笨,只向服务器发送键盘,鼠标,游戏手柄或任何输入,而服务器会进行整个动作并更新内容,将头寸和所有其他相关数据发送回客户端,然后客户端显示结果。这几乎消除了预测和类似的事情。
基督教徒

@克里斯蒂安嘿!谢谢回复。我知道这种方法,但是如果延迟时间长,这可能会使游戏变得混乱,而且我使用AppWarp的BaaS实时系统,所以我的全部逻辑只在客户端。
Suyash Mohan 2013年

结合这两种方法是权威服务器。客户端和服务器都模拟,客户端发送其输入,服务器发送回权威状态。客户调整他们的状态以匹配权威状态。因此,当状态匹配时,客户端就像在本地进行模拟一样运行(没有滞后)。
MichaelHouse

我最近发现本教程系列为管理延迟提供了很好的技巧,似乎对您的兴趣无关紧要:链接
Kris Welsh

Answers:


8

在这种情况下,航位推算可能不是最好的主意。您应该进行实体插值(有效地渲染过去的其他玩家,这始终为您提供真实有效的位置)。我在这里对此进行了更详细的介绍。过去是否会见到玩家是否可以接受,取决于您尝试做的事情的细节。


4
在编写我的第一个网络多人游戏时,我使用了这种方法。实际上,我使用@ggambett作为参考。对我来说效果很好。
NoobsArePeople2

1

关于源引擎有相当详细的文章。看起来一些相关的源代码也可以作为Source SDK的一部分获得。

https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking

它使用多种技术来尝试处理服务器-客户端模型中的网络延迟。重点似乎是本地客户端像没有服务器一样在本地处理输入和其他事件,然后处理服务器说客户端以后做错了的可能性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.