Извлечение объектов GKTurnBasedMatch из GKTurnBasedMatchmakerViewController — Swift 4

#swift #game-center #gkturnbasedmatch

#быстрый #игровой центр #gkturnbasedmatch

Вопрос:

Я пытаюсь реализовать пошаговую многопользовательскую игру (стратегическую настольную игру для 2 игроков). Мне удалось аутентифицировать локального игрока и представить GKTurnBasedMatchmakerViewController (стандартный интерфейс).

Я немного озадачен тем, как получить объект GKTurnBasedMatch, который выбирает игрок (если он доступен). Этот метод протокола GKTurnBasedMatchmakerViewControllerDelegate казался вполне разумным для этой цели, но, по-видимому, он устарел.

func turnBasedMatchmakerViewController(_ viewController: GKTurnBasedMatchmakerViewController, didFind match: GKTurnBasedMatch)

Любые подсказки будут высоко оценены!

Ответ №1:

Я согласен, функция делегирования для достижения этой цели была полезна.

Мое решение для этого — зарегистрировать слушателя в делегате, который представляет контроллер представления matchmaker, назовем это mainVC. mainVC должен соответствовать протоколу GKLocalPlayerListener.

 // In mainVC
GKLocalPlayer.localPlayer().registerListener(self)
 

Затем, когда игрок выбирает совпадение в стандартном интерфейсе, вызывается следующая функция, которую необходимо реализовать в mainVC:

 // in mainVC
func player(player: GKPlayer, receivedTurnEventForMatch match: GKTurnBasedMatch, didBecomeActive: Bool) {
  // Dismiss the turnBasedMatchmakerViewController standard interface
  // Load your match using the match object passed above
}
 

В этой функции отключите стандартный интерфейс, соответствующий плееру, а затем загрузите свою игру, используя переход или иным образом.

Функция receivedTurnEventForMatch является стандартным способом обновления вашего соответствия произошедшим событиям. Он вызывается, когда:

  • С текущим ходом связан тайм-аут, и срок его действия истекает.
  • Игрок принимает приглашение от другого игрока.
  • Ход был передан другому игроку. В этом случае значение didBecomeActive равно false.
  • Данные соответствия сохраняются другим игроком.
  • Игрок получает напоминание.