GoogleApi实时多人游戏推动更新

时间:2016-09-10 11:31:02

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

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

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

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

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

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

每次“render()”调用都会发送移动消息。 - 取决于FPS每秒30-60次。

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

我的问题和疑问是:

  • 像这样更新播放器位置通常是正确的吗?
  • 镜头迷路了。包装损失约为50-80%。

我测试时仅发送移动播放器位置的更新。然后在静止时射击4次(没有发送“玩家位置'不可靠消息') 所有4张照片都出现在“设备B”上

当我在每次更新框架上发送“不可靠的消息”时,我认为“reliableMessages”会丢失(再次大约每秒30-60次)。

1 个答案:

答案 0 :(得分:0)

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

回答你的问题:

<强> 1。像这样更新玩家位置通常是正确的吗?

您仍可以选择使用两种给定的消息传递协议。只需选择最适合您的选项,但是请注意,如果邮件在传输中被丢弃或者无法接收,您的应用程序将负责确保游戏正常运行。

<强> 2。镜头迷路了。包装损失约为50-80%。

通过可靠的消息传递,数据传输,完整性和订购得到保证。您可以选择使用回调通知交付状态。但是,为了避免丢失一些更新,请注意,您可以发送可用或不可靠消息的最大邮件大小。

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