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

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

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

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

【问题讨论】:

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

标签: android multiplayer google-play-services


【解决方案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 并且据我了解,如果在一个活动上建立的连接将存在您可以从另一个活动中访问它(但我还没有测试多人游戏)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-24
      • 2014-09-17
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      相关资源
      最近更新 更多