【发布时间】:2015-02-12 16:51:08
【问题描述】:
我为 android 开发了一款具有 google play services 实时多人游戏功能的游戏。我目前在匹配玩家时遇到问题。我不使用任何邀请功能,所以所有玩家都使用自动匹配功能。
我的游戏可以由 4 人玩,但也可以只有 3 或 2 人玩。对于我使用 2 台设备进行的测试:
RoomConfig.createAutoMatchCriteria(minNumberOfOpponents, maxNumberOfOpponents, 0);
如果我多次开始、结束和重新启动游戏,通常会发生客户端连接不正确的情况。在工作情况下,游戏 onRoomConnected 被正确调用并开始游戏。在某些情况下,这不会发生。在这些情况下,一个设备找到另一个设备,并调用其 onPeerJoined() 和 onRoomConnecting() 回调。 onRoomConnected() 永远不会被调用。那是因为其他设备没有得到任何信息,只是调用了 roomCreated 回调,就这样。
因此,一台设备找到另一台设备,并获取另一台设备加入房间的信息。当此设备再次离开房间时,它也会收到通知。但其他设备无法识别这些。
如果这有帮助。我之前有一些失去连接的问题,并通过每次房间离开任何 clint 时重新启动 apiClient 来修复它。我不认为这是相关的。
我认为正确离开当前房间并以某种方式再次加入旧房间可能是一个问题,但在第一次启动应用程序时也会发生这种情况。 apiClient 重新连接也应该避免这个问题
提前谢谢
编辑:似乎它只是我的 nexus 5 产生了错误。我测试的所有其他设备都可以正常工作。在大多数情况下,Nexus 5 也是如此。如果客户端连接并开始游戏,则永远不会有任何问题。错误只发生在这台设备上,而且在搜索在线游戏时,仅在 6 种情况下可能有 5 种发生。
它只是停止调用任何回调,有时在 onRoomCreated() 之后,有时在他找到另一个对等点和 onRoomConnecting() 之后,有时在 onRoomConnected() 被调用之后。
在这些情况下,其他设备会获得其适当的回调函数。
因此,如果错误设备在 onRoomCreated() 处停止,则其他设备会找到客户端。
如果错误设备找到其他设备并调用 onRoomConnecting() 并在之后停止,则其他设备会获得其 onRoomConnected()。
如果错误设备调用了它的 onRoomConnected(),它有时甚至会停止从那里接收任何消息,而另一台设备已经在游戏中。
【问题讨论】:
-
如果我没记错的话,这个问题与为设备逻辑和在线回调使用不同的线程有关。如果您有类似的问题,请尝试将 mainThread 用于 gps 回调中的所有内容。
标签: google-play-services multiplayer