Я делаю пошаговую многопользовательскую игру с использованием фреймворка Multipeer Connectivity .
Когда пир отключается по какой-либо причине, я хочу, чтобы этот игрок был заменен ИИ.Таким образом, игра может продолжаться для остальных игроков.
Чтобы сделать это, мне, очевидно, нужно определить, когда игрок отключился.Я знаю, что могу сделать это, внедрив session(_ :peer:didChange:)
в MCSessionDelegate
:
func session(_ session: MCSession, peer peerID: MCPeerID, didChange state: MCSessionState) {
if state == .notConnected {
// someone has disconnected, handle this...
}
}
Проблема в том, что этот метод вызывается только через некоторое время (несколько секунд) после того, как игрок фактически отключился.
То, что другие игроки ждут несколько секунд, кажется мне плохим UX, поэтому я хочу, чтобы метод session(_ :peer:didChange:)
вызывался как можно скорее.
Я знаю, что могу послать сигналв viewDidDisappear
для всех подключенных пиров, сигнализируя, что этот игрок вышел из игры.Но это обрабатывает только одну ситуацию - когда вызывается viewDidDisappear
.Существует множество других способов отсоединения от игры, например выход за пределы диапазона Bluetooth, включение режима полета или даже сбой приложения.