游戏网络延迟补偿

时间:2012-03-05 15:54:46

标签: algorithm actionscript-3 latency

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

我想要的是同步玩家的动作,这样Player1可以在屏幕上看到与Player2,Player3相同的内容......或者只是看到近距离表示(位置,受到伤害等)。 < / p>

我知道运动矢量坐标,我可以使用延迟轻松插入它们。 但是,我无法找到一种有效的方法来确定状态更新需要多长时间( T1 )才能运行client1-server-client2,然后根据对client2的屏幕进行更正T1 即可。 (你知道,ping时间可能会有很大的波动)。

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

1 个答案:

答案 0 :(得分:4)

首先,我认为服务器应该不断更新有关整个“世界”的信息。所有客户端向服务器发送他们的播放动作(即玩家所做的动作,如动作,枪击等),并使用压缩数据。

我会把“世界”分成几个区域。每个玩家当然都有一个有限的视野,所以他不能一次看到整个世界(幸运的是),因此他需要只更新他能看到的地区。

所以问题是:

  • 服务器生成世界,并将其划分为区域。
  • 当玩家进入世界时,它会获得有关整个世界的一般信息以及有关他视线中的区域的详细信息
  • 必须将具有后果的玩家的每个动作发送到获取信息的服务器(压缩)。如果状态更改具有更改一个或多个区域的效果,则对这些区域感兴趣的每个用户都必须收到更改通知

它看起来像发布/订阅设计模式(Observer),但

  • 每个客户都是发布者,服务器是玩家状态变化的订户。
  • 服务器是发布者,客户端是关于世界变化的订户,但仅限于每个玩家感兴趣的区域。这是一个特定的观察者,因为订阅因移动而随时间(地区)而变化