使用Google Play游戏服务进行多人游戏并切换活动

16

我在我的Android游戏中实现了回合制多人模式。用户在大厅等待对手,每当匹配到3个用户时,他们一起进入新的游戏房间,这是一个不同于大厅的Activity。

文档建议让Activity扩展BaseGameActivity。但是,如果在玩家已经连接的情况下切换Activity,我需要将连接部分放在一个服务中,然后再将我的Activity绑定到该服务吗?

是否有人尝试过使用Game Services?如果我不能使用BaseGameActivity,该如何开始?


我正在尝试查找回合制多人游戏的文档,但是我再也找不到它了!我很确定它曾经和实时文档一起发布,但现在似乎被谷歌删除了!你知道在哪里可以找到它吗? - thiagolr
3个回答

23

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

因此,使用片段可能是最简单的方法。它也很干净,并且如果需要,可以通过组合它们来制作平板电脑布局。

特别是,如果您正在设置多人游戏,则断开连接将使您从房间中断开连接,因此在握手后不能切换到另一个Activity :-)


非常感谢,拥有权威的答案真是太好了 :) 有些情况下你必须在不同的活动之间切换,比如如果你有一个大厅,玩家们在那里见面聊天,如果有足够多的参与者,你就可以进入资源密集型的游戏活动。但只要将所有的Google Play服务内容放入一个服务中并从活动中绑定,应该是可行的,对吧? - caw
没错。如果您只使用一个 Activity 来聚集玩家并将玩家 ID 列表传递给第二个 Activity,那么第二个 Activity 可以使用这些玩家创建房间。只要多人协议握手开始后没有 Activity 切换就可以了。 - Bruno Oliveira
@Burno 所以举个例子,如果我正在下棋,对手在思考并且还没有走棋的时候,如果我断线了,那么我就输了GamesClient吗?我的意思是,当我重新联网时,是否有一种方式可以通知我其他用户的走棋情况? - raj
抱歉评论晚了,但我刚刚谷歌了一下。我基本上是被雇来更新一个已有的游戏,加入play services等。然而,我只在自己的游戏中按照建议使用片段(fragment)完成了这个任务。然而,公司不希望我打破他们相当复杂的活动和片段结构。例如,有一个主要活动,其中包含所有用户数据、轨迹、登录(!)等信息。如果实际选择了一条轨迹并启动了游戏,则会启动一个新的活动。如何最好地维护GamesClient连接?或者我们应该重新建立连接? - Aeefire
@Aeefire:如果最近几个月事情没有改变,你将会面临相当多的问题来完成这个任务。正如Bruno Oliveira的评论所说:“Activity”转换要求你断开与“GamesClient”的连接,而在玩家握手之后是不可能做到的。 - caw
或者...你只是不从游戏客户端断开连接。 - JacksOnF1re

3
我正在使用新的Google Play Game Services开发一款多人游戏,其中包括成就和排行榜,以及多人游戏功能。
从按钮点击示例项目中可以看到,他们(Google)广泛使用片段,并在单个活动范围内保持活动。在我的自定义游戏中,我没有遇到任何问题就可以跳转到不同的活动。
你需要保留几个Google Play Game Services对象,但服务可能过剩,除非你的游戏需要执行长时间运行的非UI代码。根据我的经验,如果你在不同活动之间切换,你会想要保留当前涉及到游戏的房间和参与者的ID。
由于“连接部分”是无状态的,只需根据需要重新连接即可。你甚至可以通过Intent Bundle将房间/参与者ID传递给每个活动(或使用单例模式方法)。这样,你可以节省电池寿命、提高性能等。

1
文档解释了如何在需要时不使用BaseGameActivity使用游戏服务。例如,在登录期间:

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

点击“登录”按钮应该启动登录流程。如果您正在使用提供的BaseGameActivity基类,请调用beginUserInitiatedSignIn()方法。否则,您必须手动调用GamesClient对象的connect()方法。
对于您的具体问题,我认为这不是一个问题,所有的控制都在Google Play内部,您只需要获取GamesClient,并且据我所理解,从另一个活动访问时,连接将仍然存在(但我还没有测试多人游戏)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接