为了避免出现XY问题,我先解释一下情况。
我正在开发一个游戏,在这个游戏中,多个设备可以相互连接,从而拥有一个多人游戏。为此,我使用了多点连接。这个游戏支持2-4个玩家.
现在,我需要处理的情况下,一个球员断开与所有其他球员。当玩家断开连接时,游戏应该继续进行,除非只剩下一个玩家。但是,我想要向所有说"XXX已断开“和”杀死“断开连接的玩家显示一个警告,并向断开连接的玩家显示另一个警告,即”您断开连接“和”关闭“游戏视图控制器。
播放机可以通过以下方式断开连接:
除了第一种方式之外,任何事情都不能通过编程来控制。我目前可以这样实现第一个:
当用户按下“退出”按钮时,就在session.disconnect()被调用之后,我可以显示消息"You disconnected“。在sessionPeerDidChangeState委托方法中,我可以检测到播放器已经断开连接,我可以在那里显示"XXX断开连接“警报。
不过,我想不出如何处理其他个案。在我自己的测试中,我发现如果用户关闭屏幕,sessionPeerDidChangeState委托方法甚至都不会被调用。即使它被调用,我如何才能弄清楚这个设备是否是断开连接的?我需要知道这一点,以显示一个适当的信息,并决定是否“杀死”的球员谁断开。
我理解,这是不可能的,一个由两个同行组成的会议,因为这是不可能确定“谁与谁脱节”。游戏不能继续只有一个玩家无论如何,所以我只是要显示“所有其他玩家已经离开”警告和解散游戏视图控制器,如果我看到self.session.connectedPeers是空的。我只关心有3名球员而剩下1名球员的情况。我应该知道是哪个球员被切断了,但我不知道怎么回事。
发布于 2017-10-18 10:41:38
假设您有3个对等点连接(对等点1、对等点2和对等点3)。让我们说同伴3打开飞机模式。Peer 1和peer 2将得到对等点3断开连接的委托调用sessionPeerDidChangeState。但同行1和2之间仍然有联系(因此两者都有self.session.connectedPeers == 1)。
另一方面,对等3将看到对等点1和对等点2相继断开和self.session.connectedPeers == 0,因此对等3可以假设是它失去了连接。
正如在问题中所指出的,如果按了home按钮,您可以在applicationDidEnterBackground中断开与会话的连接。
https://stackoverflow.com/questions/46798816
复制相似问题