16

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

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

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

4

3 回答 3

23

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

因此,使用 Fragments 可能是解决此问题的最简单方法。它也很干净,如果您愿意,您可以通过组合它们来制作平板电脑布局。

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

于 2013-05-30T20:59:29.443 回答
3

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

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

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

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

于 2013-05-30T00:37:51.590 回答
1

该文档解释了如何在需要时在没有 BaseGameActivity 的情况下使用游戏服务。

例如,在登录期间:

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

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

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

于 2013-05-24T13:04:46.483 回答