gpt4 book ai didi

ios - 如何检测与当前设备的 MCSession 的非编程断开连接?

转载 作者:搜寻专家 更新时间:2023-11-01 07:08:11 25 4
gpt4 key购买 nike

为了避免成为XY问题,我先说明一下情况。

我正在开发一款游戏,其中多个设备可以相互连接以进行多人游戏。为此,我正在使用 Multipeer Connectivity。该游戏支持 2-4 名玩家。

现在我需要处理一个玩家与所有其他玩家断开连接的情况。当玩家断开连接时,游戏仍应继续,除非只剩下一名玩家。但是,我希望向所有仍然连接的玩家显示一个警告,说“XXX 已断开连接”并“杀死”断开连接的玩家,并向断开连接的玩家显示另一个警告,说“你断开连接”并关闭游戏 View Controller .

播放器可以通过以下方式断开连接:

  • 按下退出按钮
  • 关闭屏幕(这会使应用程序进入后台,显然会停止所有 Mutipeer 连接)
  • 开启飞行模式
  • 离别人太远

除了第一种方式之外的所有方式都无法通过编程方式控制。我目前可以像这样实现第一个:

当用户按下退出按钮时,就在调用 session.disconnect() 之后,我可以显示消息“您已断开连接”。在 sessionPeerDidChangeState 委托(delegate)方法中,我可以检测到玩家已断开连接,我可以在那里显示“XXX 断开连接”警报。

但是,我不知道如何处理其他情况。在我自己的测试中,我发现如果用户关闭屏幕,甚至不会调用 sessionPeerDidChangeState 委托(delegate)方法。即使它被调用,我应该如何确定该设备是否是断开连接的设备?我需要知道这一点以显示适当的消息并决定是否“杀死”断开连接的玩家。

我知道这对于由 2 个对等方组成的 session 是不可能的,因为无法确定“谁与谁断开连接”。无论如何,只有 1 名玩家无法继续游戏,所以如果我看到 self.session.connectedPeers,我将显示“所有其他玩家已离开”警报并关闭游戏 View Controller 是空的。我只关心有 3 名玩家和其中 1 名玩家的情况。我应该能够知道断开连接的是哪个播放器,但我不知道如何。

最佳答案

假设您连接了 3 个对等点(对等点 1、对等点 2 和对等点 3)。假设对等点 3 打开飞行模式。对等点 1 和对等点 2 将获得委托(delegate)调用 sessionPeerDidChangeState,对等点 3 已断开连接。但是对等点 1 和 2 之间仍然有连接(因此两者都有 self.session.connectedPeers == 1)。

另一方面,对等点 3 将看到对等点 1 和对等点 2 一个接一个地断开连接并且 self.session.connectedPeers == 0 因此对等点 3 可以假设它是丢失的那个连接。

如问题中所述,如果按下主页按钮,您可以在 applicationDidEnterBackground 中断开与 session 的连接。

关于ios - 如何检测与当前设备的 MCSession 的非编程断开连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46798816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com