为了避免成为XY问题,我将首先解释情况。
现在我需要处理一个球员与所有其他球员断开连接的情况。当一名玩家断开连接时,游戏仍应继续,除非只剩下一名玩家。但是,我希望向所有仍然连接的玩家显示一个警报,称“XXX已断开连接”并“杀死”断开连接的玩家,并向断开连接的玩家显示另一个警报,称“您断开了连接”并解除游戏视图控制器。
玩家可以通过以下方式断开连接:
-
按下退出按钮
-
关闭屏幕(这会使应用程序进入后台,从而明显停止所有多对等连接)
-
打开飞行模式
-
离其他人太远了
除第一种方式外,其他一切都无法通过编程进行控制。我目前可以实现第一个,如下所示:
当用户按下退出按钮后
session.disconnect()
如果调用,我可以显示消息“You disconnected”。在里面
sessionPeerDidChangeState
委托方法,我可以检测到玩家已断开连接,我可以在那里显示“XXX断开”警报。
然而,我不知道如何处理其他案件。在我自己的测试中,我发现如果用户关闭屏幕
会话对等更改状态
甚至没有调用委托方法。即使它被调用,我该如何判断该设备是否是断开连接的设备?我需要知道这一点,以显示适当的信息,并决定是否“杀死”断开连接的玩家。
我理解,对于由2个对等方组成的会话,这是不可能的,因为不可能确定“谁与谁断开连接”。无论如何,游戏不能只在一个玩家的情况下继续,所以我要显示“所有其他玩家都离开了”警报,如果我看到了,请关闭游戏视图控制器
self.session.connectedPeers