游戏网络延迟补偿

游戏网络延迟补偿

问题描述:

我正在开发一个简单的快节奏2维实时多人在Flash游戏。玩家只能射击和走路点移动时尚。我使用TCP套接字连接(AS3不提供UDP)。游戏网络延迟补偿

我只需要同步玩家的动作,让玩家1在其屏幕上可以看到与玩家2,玩家3相同的东西,或者只是看到接近的表示(位置,受到伤害等)。

我知道运动矢量坐标,我可以使用延迟方便地在它们上插值。 但是,我找不到一个有效的方法来确定有多少时间(T1)是否需要状态更新来旅行client1-server-client2,然后根据T1更正客户端2的屏幕。 (你知道,ping时间可能会波动很多)。

我需要一种方法来做到上述,我需要的方式是尽可能快和准确,但不是非常复杂。 (我应该使用什么算法?什么是解决方案 - 时间戳,可能或什么? - 我不知道。)

+1

请参阅http://gamedev.stackexchange.com/questions/552/synchronizing-clients-with-a-server-and-with-each-other和http://gamedev.stackexchange.com/questions/6645/滞后补偿与联网-2D游戏 – 2012-03-05 16:52:39

首先,我认为服务器应该不断更新关于整个“世界”的信息。所有的客户端都将他们的游戏行为(即玩家的行为,如移动,射击等)发送到服务器,并使用压缩数据。

我会将“世界”划分为区域。每个玩家当然都有一个有限的观点,所以他不能一次看到所有的世界(幸运的是),因此他只需要更新他所能看到的区域。

所以事情是:

  • 服务器生成的世界,并将其划分成多个区域。
  • 当玩家进入这个世界,它得到了整个世界和地区的一般信息的详细信息,在他面前
  • 有后果玩家的每个动作,必须被发送到服务器(压缩),取得信息。如果状态变化具有改变一个或多个区域的影响,每个用户有兴趣在这些地区必须得到变更通知

它看起来像一个发布/订阅设计模式(观察员),但

  • 每个客户端都是发布者,而服务器是用户关注播放器状态更改的用户。
  • 服务器是发布者,客户是订阅者,关注世界变化,但仅限于每个玩家感兴趣的区域。这是一个特殊的Observer,订阅随着时间(地区)的变化而变化