Articles of 延迟

处理基于实时音乐/节奏的游戏的延迟

假设我正在制作一个合作的多人音乐节奏游戏 – 两个玩家并肩移动他们的光标/头像,用鼠标左右移动,并尝试击中或躲避正在向他们走来的障碍物。 这里的问题是,如果连接有延迟,比如说B方向200毫秒,那么当玩家A接收到玩家B的移动时,已经太晚了 – 玩家在轨道上的位置将会提前当它被发送的时候。 在两个玩家互相等待以确认他们各自的input的同时,还有一个问题,就是音乐必须在两个玩家的客户端上毫不拖延地继续播放,否则会听起来非常波动,播放器动作可能与节奏不一致,这不是我们想要的。 我们如何处理这个延迟?

处理多人射击游戏中的延迟

我有一个架构的想法,我想知道是否有人执行这样的事情,或者使用AWS或其他服务来帮助? 我想过使用NodeJS + SocketIO来处理服务器端的这种合作性的shmup(想想雷电或Galaga),我们正在开始工作。 我们开始考虑延迟问题。 我提出的解决scheme是在2个用户玩一些epsilon值(比如300miles或者其他东西)的用户的中间点旋转/closures服务器。 也许服务器将允许多达50个用户同时玩,然后它会拒绝请求,这将popup另一个服务器。 这应该会导致2个玩家的等待时间大致相等。 而且,如果我们正在匹配制作用户,那么我们总是将两个最近的用户配对在一起。 我认为还有其他因素需要考虑,比如用户技能水平,但是我认为现在我们最关心的是延迟,因为它直接影响游戏性。 其实我们的比赛确实需要相当准确的时间。 此外,我们希望用户能够看到彼此拍摄,因为当他们相互同步时,很酷的animation发生。 我想这与战斗游戏在时间/精度方面的运作方式类似。 想法? 思考? 别人怎么解决这个问题呢? 我在哪里可以开始寻找例子?

多人游戏中的可延迟的延迟范围

我正在编程一个多人游戏。 我以毫秒计算ping: ping = the_time_i_recieved_pong – the_time_i_sent_ping 我实现了客户端预测和插值algorithm。 当我和朋友们一起testing游戏的时候,对于那些在100ms以下的游戏者来说,这样的游戏效果相当不错,但是在120ms之后,他们告诉我这些游戏变得无法玩了。 所以我的问题是,我应该尝试在超过120毫秒的延迟时间内改善客户的游戏体验(是否超过120毫秒被认为是可以容忍的)? 谢谢你们 ! 注:我的游戏是一个快节奏的游戏,所以滞后赔偿很重要。

更新(GameTime)在完成之前调用吗?

Update(GameTime)开始处的代码被一遍又一遍地Update(GameTime)调用, Update(GameTime)结束处的代码只会在延迟后被调用。 Update(GameTime)在完成之前再次调用? 相关代码: public override void Update(GameTime gameTime) { Console.WriteLine($"Current Position (Outer): {Texture.Position.Y}"); if (Keyboard.IsKeyDown(Keys.Space)) { Jump(gameTime); } UpdateGravity(gameTime); if (Keyboard.IsKeyDown(Keys.A)) { velocity.X = -HorizontalMoveSpeed*(float) gameTime.ElapsedGameTime.TotalMilliseconds; } else if (Keyboard.IsKeyDown(Keys.D)) { velocity.X = HorizontalMoveSpeed*(float) gameTime.ElapsedGameTime.TotalMilliseconds; } else { velocity.X = 0f; } Texture.Position += velocity; CheckCollisions(); base.Update(gameTime); } private void UpdateGravity(GameTime gameTime) { velocity.Y […]

在锁步networking游戏中,如何处理突然的滞后和断开连接?

我试图通过使用锁步networking模型来实现类似于“街头霸王”的游戏,使得两个玩家可以通过互联网远程玩。 我已经阅读了很多有关锁步networking方法的文章,我基本上可以实现每一步的转/帧处理。 我的理解是,如果现在轮到101,并且如果玩家A没有收到玩家B的回合101动作(分组),则玩家A必须等待。 当这种情况发生时,玩家B也必须等待,因为玩家A不会向玩家B发出进一步的动作,因为他正在等待。 游戏是否应该为这种情况做点什么? 例如,我看到“星际争霸”这样的游戏,有时会出现一个等待其他玩家的对话,如果倒数到0,玩家可以断开这个挂机。 为了做到这一点,我不明白如何判断谁是滞后的,什么是正确的处理。 玩家A或玩家B都会认为对方因为他目前没有收到数据包而滞后。 我要向用户展示什么? 如果滞后仍在继续,那么如何通过提供正确的游戏结果(迟到的玩家应该被给予损失而另一个玩家应该获得胜利)来提前结束游戏? 就像星际争霸中的倒计时对话框一样。 另一方面,如果情况不是滞后,而是与玩家B断开呢?

如何在多人游戏中执行游戏对象平滑

我们正在开发基础架构来支持我们的游戏引擎的多人游戏。 简而言之,每个客户端(播放器)引擎以给定的时间间隔发送关于相关游戏对象的一些数据片段。 在接收端,我们将传入的数据转到当前时间(以补偿延迟),然后进行平滑步骤 (这是此问题的主题)。 我想知道应该如何平滑? 目前该algorithm与此类似: 接收对象的进入状态(位置,速度,加速度,旋转,自定义数据,如视觉属性等)。 计算局部对象位置与之前预测步骤之后的位置之间的差异。 如果差异不超过某个阈值,则开始平滑步骤: 标记对象的当前位置和目标位置 。 在这些值之间进行线性插值0.3秒。 我想知道这个scheme是否有用,或者是否还有其他常用的实现或algorithm应该使用? (例如 – 我应该只消除位置?或其他值,如速度等) 任何帮助将不胜感激。

Apple Game Center连接有多less延迟?

我需要在玩家之间大约每0.1秒需要几个字节的数据才能在iOS上拥有一个stream畅的多人游戏。 iOS游戏中心的速度足够吗? 我可以期待什么延迟值?

实体插值(丢包?)

我在networking游戏上工作了一段时间。 我知道client-side prediction和lag compensation (shooting)但我不确定实体插值客户端。 我从服务器发送10fps的更新/同步数据包,并从当前位置插入到新接收的位置。 插值需要100ms(因为10fps)才能达到目标位置,但是如果新位置迟到或者2-3个数据包丢失,该怎么办? 将不存在目标位置,同步(客户端)实体将空闲,直到新的位置数据包,但实体不断向前移动服务器端。 基本上,我不知道在这种情况下做什么。

networking抖动,客户端input到服务器

我正在研究一个权威的客户/服务器游戏,期待Valve和Gaffer了解这个概念。 目前,服务器每秒钟模拟20个刻度。 从客户端接收到的input被缓冲,并且只在这些滴答中的一个中进行处理。 但是,如果客户以更快的速度发送input,例如每秒60次,那么客户端将比普通客户端快3倍。 解决这个问题的方法是让服务器在缓冲区中合并/统一input,并处理一次input,而不是单独处理缓冲input。 现在,考虑到后一种解决scheme,发送速率为20的客户端可能受到networking抖动的影响,这可能导致服务器同时接收2个或更多input。 这将导致服务器合并/统一input,实际上应该单独处理。 所以我的问题是,服务器应该如何处理input,以防止更多的input被处理,而不是同时跳过input? 我希望我有道理,如果不是只是告诉我详细说明:)

如何处理在线游戏的玩家input与ping抖动?

我目前正在开发一个在线游戏,并围绕这个“ 源多人networking”文章来介绍我的networking架构。 但是,我有点卡住在用户input如何工作。 本文介绍了键盘/鼠标状态的快照是从客户端以服务器运行相同的速率发送的。 我在我的游戏中这样做,这在我看来工作得很好,但是服务器上的模拟与客户端预测略有不同,导致客户端播放器最终与服务器不同步。 我相信这种差异是由于ping抖动造成的。 例如,如果客户端每25ms发送一次input,理论上如果服务器每25ms接收一次input,它将具有相同的模拟。 但是,对于任何抖动,例如,服务器可能不会收到任何30ms的input。 这意味着它将无法处理input,直到下一个滴答时间,因为它没有按时到达,并且服务器上的实体最终会与客户端不同步。 有什么办法来解决这个问题? 也许我在源多人networking示例中错过了一些东西。 如果有人能更好地解释或提供任何建议,将不胜感激。 谢谢