#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.
- Данные соответствия сохраняются другим игроком.
- Игрок получает напоминание.