如何同步播放服务实时多人游戏
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后端和前端的多人游戏。什么是最佳做法?