这是一个老问题,但我最近研究出类似的代码,所以也许这会帮助某人。
是延迟在计算中总是有用的。但它比RTT稍微复杂一些。往返时间总是在变化......您的网络代码可以保持平均值,但与平均值的差异很大。
本地客户端,远程客户端和服务器都使用算法预测当前位置。下面的数据是接近典型:
- 时间:吨
- 放置:位置(X,Y,Z)和方向(X,Y,Z,W)
- 机芯:线性运动矢量给予与长度为速度(X,Y,Z),并 旋转运动向量赋予轴线与长度为转速(X,Y,Z)
方向您需要一个从[T,P推断算法,M]设置为simtime。我不会在这里提供这些。
当客户端在[T,P,M]的船舶驱动器中记录更改时,在T + deltaT之前不会到达服务器。但是,如果deltaT在典型网络延迟的容忍范围内,服务器可以说“是的,它发生在T,我接受”。否则,它可能需要纠正客户说“没有那么容忍,它发生在我的时间T'”,在这种情况下,客户将不得不重新从服务器的纠正的一个更新所有随后驱动的[T,P,M]变化(这意味着你需要保持一个队列或列表)。
下一个客户端将在T + deltaT + differentdeltaT获取它。它不可能改变它已经模拟的东西,所以如果它不延迟它的模拟,它将跳过远程船,你会看到一个混乱的框架。这就是为什么远程驱动的船只应该使其模拟延迟一段时间,持续时间大于2 *typicalδT。这应该是一个恒定的延迟,或者逐渐改变的延迟,严重滞后的时候,你会看到混蛋帧仍然
可以流畅的额外平滑代码的所有抽搐,但不这样做,直到你的代码,否则完美无瑕,因为它会让人不可能看到问题出在哪里。
你必须有一个很好的同步时间参考。很多代码都比较滑落(例如RakNet没有(或没有)非常好)。这里有一个很好的提示:短时间内,你可以假定每个人的时钟都以相同的速率运行,你只需要计算出偏移量是多少,所以保持一个最大和最小偏移量的窗口,并在学习时关闭它;从长远来看,您需要补偿时钟快速或慢速运行的客户,因此,如果您确实知道必须打开窗口,请打开该窗口。您必须使用单调递增的本地时间源,并且不要使用处理器速度(现在是可变的)。
不,当本地“头像”移动时不要延迟本地模拟。这看起来太没有反应了。你可以稍微延迟一段时间(最多50毫秒)以帮助改善同步,但是一直延迟到RTT会使你的游戏看起来令人沮丧地失去响应。为本地延迟设置一个选项并播放它,因为一个小的一致延迟是可以接受的,并且可以改善同步。但这不是必要的,可能会导致很多问题,所以我建议最后一次执行该代码。 (如果你正在尝试做一个FPS近战游戏,你需要做这个,所有其他的帮助你可以得到)。
至于防止欺诈与模拟平滑:首先,客户不应该从最后一个已知的位置推断,当官员的位置发生变化时。它应该注册一个调整矢量,然后慢慢地从旧路径移动到新路径以获得平滑(但就像我上面所说的那样,最后执行此代码或者将屏蔽其他错误)。其次,服务器应该容忍大范围的延迟......即使在同一个以太网上的机器上,数据包延迟通常会运行5ms到100ms左右......这是一个很大的范围。当然,你需要把它关掉,并说“如果你说你在时间T移动,但我在T + some_large_number得到了数据包,那么我认为你正试图调整过去并对我说谎。” some_large_number不应该比平均RTT大得多,以保持诚实。
模拟不会严格同步。他们应该在互联网上停留不超过400毫秒,但肯定会在滞后时间以外流失到30秒或更长时间,而且你需要容忍那些因为它们并不稀有的东西。鉴于互联网受铜缆中光速的限制,您可以始终期望单向延迟通常至少为您的远端客户100ms,通常为500ms或更长。
因此我强烈建议你不要试图通过互联网混战的FPS游戏(一些大公司尝试,但总是有麻烦)。如果您使用投射物(通过在一次模拟中快速运行它们并在另一次模拟中运行速度较慢),您可以执行一些技巧,以便即使计时关闭,它也会显示。另外,FPS游戏使用命中检测基于攻击者模拟的规则......当攻击者知道他已经死于目标并且未命中时,感觉更加错误,然后当防御者知道他已经挡住并被击中时无论如何。你必须选择一个或另一个,并且从心理上来看,这是如何完成的。近战需要一定程度的同步,这是坦率的不可能的,大多数游戏公司不会触及MMORPG FPS近战,而是使用自动瞄准(尝试玩Mortal Online,你会明白我的意思)。
祝你好运。
请注意,我不是问很多游戏使用什么样的运动系统或算法,我已经讨论过这是另一个线程。这里的主要问题是延迟是否应该考虑到移动计算(客户端或服务器端),以及我做出的假设是否正确。 Upvote试图帮助不管。 – Tom 2009-09-19 20:45:07
这是一个*这在一个* – Tom 2009-09-19 20:45:39
抱歉的误解。 我的两分钱是,你至少应该在服务器端使用延迟补偿,以使其对延迟时间较长的人员公平。 然而,实现它的好方法并不是我有资格回答的。 祝你好运,我希望你会找到你最终找到的。 – 2009-09-19 20:55:07