【问题标题】:GoogleApi Real Time Multiplayer pushing updatesGoogle Api 实时多人游戏推送更新
【发布时间】:2016-09-10 11:31:01
【问题描述】:

我正在使用 Google Api 创建一个实时多人游戏 - 使用 libGDX 的自上而下的射击游戏。

每次调用“render()”方法时,都会通过“sendUnreliableMessage”发送玩家位置:

  • 调用了render()。
  • “设备 A”通过“sendUnreliableMessage”发送本地 Player 位置 (x, y) 和移动方向。
  • “设备 B”收到消息。在最后一个位置 (x,y) 和新位置 (x,y) 之间进行插值。
  • “设备 B”将本地敌方玩家移动到新位置。 (插值和最终位置)

玩家射出的子弹通过“sendReliableMessage”发送,如下所示:

  • 玩家按下“开火”按钮。
  • Bullet 对象在本地“设备 A”上创建并开始飞行。
  • 子弹创建位置 (x, y) 和方向由“sendReliableMessage”发送给其他玩家。
  • “设备 B”接收到消息后,还在接收到的起始 x 和 y 上本地创建一个 Bullet 对象,并使其向接收到的方向飞行。

移动消息在每次“render()”调用时发送。 - 取决于每秒大约 30-60 次的 FPS。

仅当按下“开火”按钮时才会发送项目符号消息。只有一次。而且只有子弹的“创造位置”。两个设备都从该位置计算本地移动更新。

我的问题和疑问是:

  • 像这样更新播放器位置是不是很常见?
  • 镜头丢失。 1-3 of 4. 大约 50-80% 的包裹损失。

我测试了仅在移动时发送玩家位置的更新。然后在静止不动的情况下射击 4 次(没有发送“玩家位置 'unreliableMessages') 并且所有 4 个镜头都出现在“设备 B”上

这让我觉得当我在每次帧更新时发送“不可靠消息”时“可靠消息”会丢失(再次大约每秒 30-60 次)。

【问题讨论】:

    标签: android libgdx google-play-services multiplayer real-time-updates


    【解决方案1】:

    如果我们纯粹依赖Sending game data,按照我的理解,您可以使用 Google Play 游戏服务提供的两种消息传递协议来实现发送数据消息。

    回答您的问题:

    1.像这样更新玩家位置是正确的方式吗?

    您仍然可以选择使用两种给定的消息传递协议中的任何一种。只需选择最适合您的,但请注意,如果消息在传输过程中丢失或接收无序,您的应用有责任确保游戏正常运行。

    2。镜头正在丢失。 1-3 of 4. 大约 50-80% 的包裹丢失。

    通过可靠的消息传递,可以保证数据传递、完整性和排序。您可以选择通过使用回调来接收有关交付状态的通知。但是,为避免丢失某些更新,还请注意,对于可靠或不可靠的消息,您可以发送的消息大小有一个上限。

    除了文档中给出的内容之外,此 SO 帖子中的建议 - Real Time Multiplayer Best way for pushing updates on android 也可能有所帮助。

    【讨论】:

    • 感谢您抽出宝贵的时间来写一个答案,但您真的根本没有帮助我。我已经知道这两种消息传递协议,并且已经在我的帖子中解释了我在哪里使用哪一个以及我使用插值来解决包丢失问题。 - 此外,我完全了解谷歌文档所写和解释的内容,这篇文章的重点是,即使使用“reliableMessage”,也不能保证“交付、不完整和订购”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 2023-03-04
    • 2015-06-19
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    相关资源
    最近更新 更多