【问题标题】:Detect if other player left unintentionally (e.g. internet disconnection) and reconnect - Google play real time multiplayer检测其他玩家是否无意离开(例如互联网断开连接)并重新连接 - Google play 实时多人游戏
【发布时间】:2016-05-16 12:16:56
【问题描述】:

我正在实现 google play 游戏服务实时多人游戏。

目前,如果我关闭一个客户端上的 WIFI,另一个客户端不会检测到连接丢失。没有调用 PeerDisconnect 事件。

1 - API 是否提供任何东西来检查对等方是否仍然连接?

2 - 有没有办法让玩家重新连接到房间?

【问题讨论】:

    标签: android unity3d google-play-services multiplayer prime31


    【解决方案1】:

    1 - API 是否提供任何东西来检查对等方是否仍然连接?

    Connecting players 中所述,您可以使用RoomStatusUpdateListener 回调来监控参与者的连接状态。如前所述:

    要在所有玩家连接时收到通知,您的游戏可以使用RoomUpdateListener.onRoomConnected() 回调。您的游戏还可以使用RoomStatusUpdateListener 回调来监控参与者的连接状态。根据参与者的连接状态,您的游戏可以决定是开始还是取消游戏会话。

    2 - 有没有办法让玩家重新连接到房间?

    实时多人游戏 - Gameplay 声明:

    连接房间所需数量的参与者后,房间被视为“已满”,游戏就可以开始了。参与者加入房间后,您的游戏可以允许他们离开房间(实际上是让他们退出游戏)。但是,没有新玩家可以在房间被“填充”后加入(甚至不能填充参与者已经腾出的位置)。

    除此之外,参考best practice for Real-time multiplayer

    如果您没有适当地离开房间,Google Play 游戏服务将继续向客户发送活动和邀请通知。每当出现以下任一情况时,您都应该离开活动房间:

    • 游戏结束(例如,玩家赢得了比赛)。
    • 当您的游戏进入后台时。
    • 在 Android 上,在以下情况下离开房间:
      • 玩家在等候室 UI 中取消游戏。
      • onActivityResult() 回调中返回的响应码是 GamesActivityResultCodes.RESULT_LEFT_ROOM
      • Activity onStop() 被调用。这可能表明您的 活动正在被破坏。在这种情况下,离开房间并打电话 disconnect()

    希望这些链接能解决您的所有顾虑。快乐编码! :)

    【讨论】:

    • 1 - 谢谢,我会调查一下,即如果其他参与者的 Internet 已关闭的参与者的连接状态发生变化。 2 - 所以简短的回答是离开后无法重新连接到同一个房间。 :)
    • 更新:测试了您的第一个问题的解决方案----当参与者的互联网连接断开连接时,甚至只是在数据和 Wifi 之间切换时,参与者的连接状态不会改变。它仍然显示参与者已连接,直到您呼叫其他参与者的离开房间。但是你现在不能发送任何消息!
    • 我有同样的问题,是的,按照@Teyam 的建议实施 RoomStatusUpdateListener 回调并没有帮助。当对等体失去连接时,API 不会调用任何回调。我打算通过在客户端上设置看门狗计时器来解决这个问题,这些计时器会反复 ping 对等点以查看它们是否仍然连接。
    猜你喜欢
    • 2015-10-03
    • 2013-09-24
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 2022-01-14
    相关资源
    最近更新 更多