Google Play服务多人游戏匹配玩家错误

时间:2014-12-14 13:18:15

标签: google-play-services multiplayer

我开发了一款带有谷歌播放服务实时多人游戏功能的Android游戏。我在匹配玩家时遇到了问题。我不使用任何邀请功能,因此所有玩家都只使用自动匹配功能。

我的游戏可以与4名玩家一起玩,但只有3或2名玩家的游戏也是可能的。对于我使用2个设备的测试,我使用:

RoomConfig.createAutoMatchCriteria(minNumberOfOpponents, maxNumberOfOpponents, 0);

如果我多次开始,结束和重新启动游戏,通常会发生客户端未正确连接的情况。在工作情况下,正确调用onRoomConnected游戏并开始游戏。在某些情况下,这不会发生。在这些情况下,一个设备找到另一个设备,并调用其onPeerJoined()和onRoomConnecting()回调。 onRoomConnected()永远不会被称为tho。那是因为其他设备没有得到任何信息,只是调用了roomCreated回调,就是这样。

因此,一个设备找到另一个设备,并获取另一个设备加入房间的信息。当该设备再次离开房间时,它也会得到通知。但是其他设备无法识别这一点。

如果这有帮助。我之前遇到了一些丢失连接的问题,并且每次在任何clint上留下一个房间时重新启动apiClient就可以修复它。我不认为这是相关的。

我认为这可能是一个问题,正确离开当前房间,并以某种方式再次加入旧房间,但它也发生在第一次启动应用程序。此外,apiClient重新连接应避免此问题

提前谢谢

编辑:看起来它只是我的nexus 5产生错误。我测试的其他所有设备都运行正常。在大多数情况下,Nexus 5也是如此。如果客户端连接并且游戏开始,则从未出现任何问题。 errrr只发生在这一台设备上,在搜索在线游戏时,只有6个案例中有5个。

它只是停止获取任何被调用的回调,有时是在onRoomCreated()之后,有时在找到另一个对等体和onRoomConnecting()之后,有时在调用onRoomConnected()之后。

在这些情况下,另一个设备会获得名为tho的适当回调。

  • 因此,如果错误设备在onRoomCreated()处停止,则另一台设备会找到该客户端。

  • 如果错误设备找到另一个设备并且调用onRoomConnecting()并且之后停止,则另一个设备获取其onRoomConnected()。

  • 如果错误设备调用了onRoomConnected(),它有时甚至会停止从那里获取任何消息,而另一个设备已经在游戏中。

1 个答案:

答案 0 :(得分:0)

也许这有助于某人。我不是100%肯定我解决了我的问题。没有深入测试,但现在看来一切正常。

我的问题是,我的应用程序中有两个不同的线程,标准活动GUI线程启动apiClient并处理回调,而gameengine线程启动房间创建并通过apiClient发送可靠消息。

看来,有些事情会在同伴连接和交易他们的第一批数据时陷入困境。目前我避免直接​​调用gameengine线程中的任何apiClient操作,但使用runOnGuiThread来处理Activity Gui线程上的这些操作。