如何同步播放服务实时多人游戏

Posted

技术标签:

【中文标题】如何同步播放服务实时多人游戏【英文标题】:How to synchronize Play Services Real Time Multiplayer 【发布时间】:2017-09-19 14:15:36 【问题描述】:

我正在使用 Libgdx 开发流行游戏 Pong 的在线版本。我已经开始使用 Google 的 Realtime Multiplayer 服务在玩家之间发送游戏数据,但我不知道如何解决我面临的同步问题。

此时发送的信息是玩家的桨,所以当我移动时,我会将我的新位置发送给对手。对手收到时,时间已经过去,同步丢失。

我知道使用最慢的连接在移动之间可能应该有一些等待时间,但是我怎样才能让它看起来流畅呢?

【问题讨论】:

【参考方案1】:

这个问题没有明确的答案,但是人们可以采用各种策略来解决这种情况。

从使用 UDP 协议开始(如果你使用基于套接字的通信,我会推荐你​​,因为每个毫秒在实时游戏中都很重要。我认为 google api 有 UDP,这是不可靠的消息传递。我再次没有使用 google-realtime- 的经验api) 用于插值、航位推算、客户端预测等的消息交换只是少数。

这是一个非常广泛的话题,需要在这里回答。当我制作基于多人坦克的游戏时,我做了一些事情来让事情看起来更流畅一些。

    使用 UDP 协议将动作发送到服务器。 我将在客户端为玩家保留两个条目。一个是当前值,一个是要设置的值。然后我将当前值乘以 0.3f 之类的平滑因子,直到它不等于要设置的值。 (这有助于减少抖动) 我会通过 TCP 发送重要消息。

我提到的要点描述了我在游戏中所做的事情,但可以用于任何事情。虽然我建议你阅读这个名为 Gaffer on Games

的网站上的文章

同样,这个领域很大,没有答案可以帮助你。我就这个话题做了我的论文,但仍然不能给你一个明确的答案。您将不得不阅读大量文章并根据需要对所学内容进行建模。

【讨论】:

以上是关于如何同步播放服务实时多人游戏的主要内容,如果未能解决你的问题,请参考以下文章

带有JavaScript后端和前端的多人游戏。什么是最佳做法?

如何在多人游戏中同步物理?

使用 Photon Unity Network(多人游戏)在 Unity 中实时同步

Source引擎多人模式网络同步模型

Unity3D客户端实时同步技术

多人在线游戏,客户端服务器间同步低延迟方案(译)