带有活动切换的 Google Play 游戏服务多人游戏

Posted

技术标签:

【中文标题】带有活动切换的 Google Play 游戏服务多人游戏【英文标题】:Google Play Game Services multiplayer with Activity switching 【发布时间】:2013-05-19 12:45:18 【问题描述】:

在我的 android 游戏中,我有一个回合制多人游戏。用户在大厅等待对手,只要匹配到了 3 个,他们就会一起去一个新的游戏室,这是大厅之外的另一个 Activity。

文档建议让活动扩展 BaseGameActivity。但是当我在玩家已经连接的情况下切换 Activity 时,我是否需要将连接部分放在我的 Activity 然后绑定到的 Service 中?

有人尝试过游戏服务吗?如果我不能使用 BaseGameActivity,如何开始?

【问题讨论】:

我正在寻找回合制多人游戏的文档,但我再也找不到了!我很确定它与实时文档一起,但现在看来谷歌删除了它!你知道在哪里可以找到它吗? 【参考方案1】:

因此,我们将所有 Google Play 游戏服务示例编写为单 Activity 游戏的原因之一是,在 Activity 之间切换需要您断开与 GamesClient 的连接并从新 Activity 连接一个新的。

因此,使用 Fragments 可能是解决此问题的最简单方法。它也非常干净,可以让您根据需要组合它们来制作平板电脑布局。

特别是,如果您正在设置多人游戏,断开连接会断开您与房间的连接,因此在开始握手后您无法切换到其他 Activity :-)

【讨论】:

非常感谢,很高兴有一个权威的答案:) 肯定有你必须在活动之间切换的用例,例如如果您有一个玩家见面和聊天的大厅,并且如果那里有足够的参与者,您将进入资源密集型游戏活动。但是,如果您将所有 Google Play 服务内容放入一个服务中,然后从活动绑定到该服务,这应该是可能的,对吧? 没错。如果您使用一个 Activity 只是为了聚集玩家并将玩家 ID 列表传递给第二个 Activity,那么第二个 Activity 可以为这些玩家创建房间。只要多人握手开始后没有Activity切换就可以了。 @Burno 例如,如果我正在下棋,而其他玩家正在思考并且在采取行动之前,如果我断开连接,那么我会失去 GamesClient?我的意思是,有没有办法在我上线时通知我其他用户的移动? 很抱歉评论太晚了,但我只是用谷歌搜索了这个。我基本上被雇来使用游戏服务等更新现有游戏。但是,我只是在我自己的游戏中以片段的建议方式完成了这项工作。然而,公司不希望我打破他们相当复杂的活动结构和碎片。有例如所有用户数据、曲目、登录(!)等都在其中的主要活动。如果一个曲目实际上被选中并启动到游戏中,则会启动一个新活动。维护 GamesClient 连接的最佳做法是什么?还是我们应该重新建立连接? @Aeefire:如果在过去的几个月里事情没有改变,那么你会遇到很多问题。正如 Bruno Oliveira 的评论所说:Activity 开关要求您断开与GamesClient 的连接,这在玩家握手后是不可能的。【参考方案2】:

我正在使用这些新的 Google Play 游戏服务开发多人游戏。它包括成就和排行榜,以及多人游戏。

从按钮单击示例项目中,我发现他们(谷歌)广泛使用片段,并且保持在单个活动的范围内。在我的自定义游戏中,我可以毫无问题地在活动之间跳转。

您需要保留一些 Google Play 游戏服务对象,但服务可能有点过头了,除非您的游戏需要执行长时间运行的非 UI 代码。根据我的经验,如果您在活动之间切换,您将希望保留当前参与游戏的房间 ID 和参与者 ID。

由于“连接部分”是无状态的,只需根据需要重新连接即可。您甚至可以通过 Intent 包(或使用单例模式方法)将房间/参与者 ID 传递给每个活动。这样,您将节省电池寿命、性能等。

【讨论】:

【参考方案3】:

文档说明了如何在需要时使用不带 BaseGameActivity 的游戏服务。

例如,在登录期间:

https://developers.google.com/games/services/training/signin

点击登录按钮应该会启动登录流程。如果您使用示例中提供的 BaseGameActivity 基类,只需调用 beginUserInitiatedSignIn() 方法。否则,您必须手动调用 GamesClient 对象的 connect() 方法。

对于您的具体问题,我认为这不是问题,所有控件都在 Google Play 内部,您只需要获取 GamesClient 并且据我了解,如果在一个活动上建立的连接将存在您可以从另一个活动中访问它(但我还没有测试多人游戏)。

【讨论】:

以上是关于带有活动切换的 Google Play 游戏服务多人游戏的主要内容,如果未能解决你的问题,请参考以下文章

Google Play 游戏服务成就活动立即结束

如何从 Google Play 服务通知中检测意图

登录/重试失败时的 Google Play 游戏服务怪异(活动生命周期)

带有 Google Play 游戏服务的 OAuth 令牌

带有 Room 数据库的 Google play 游戏服务

如何避免 Google Play 游戏服务登录对话框自动提示?