Размещенные соответствия
Размещенные соответствия позволяют Вашей игре использовать matchmaking службу Центра Игры, чтобы найти проигрыватели, но использовать Ваш собственный сервер для подключения плееров друг к другу. Размещенные соответствия требуют, чтобы Вы реализовали свой собственный низкоуровневый сетевой код, потому что Игровые серверы Центра не вовлечены в игру соответствия вообще. Однако размещенные игры предлагают большие размеры соответствия и возможность добавить Ваш собственный сервер в каждое соответствие.
Соответствие проигрывателей для размещенного соответствия
Код, который Вы пишете для размещенного matchmaking, подобен коду, который Вы пишете для соответствий в реальном времени. Прежде чем Вы попытаетесь создать игру, использующую размещенные соответствия, необходимо уже быть знакомы с matchmaking в реальном времени. Критическое различие между этими двумя моделями - то, который разместил идентификаторы проигрывателя возвратов matchmaking вместо завершенного объекта соответствия. Ваша игра тогда подключает тот плеер к Вашему собственному серверу. Когда одно устройство в соответствии должно связаться с другими, Ваш сервер должен соответствовать сетевой адрес того проигрывателя к идентификатору проигрывателя и, подобный соответствию, выполнить маршрутизацию.
Таблица 9-1 перечисляет наиболее распространенные методы для matchmaking в реальном времени и соответствующие методы или подробные данные реализации для размещенного matchmaking.
matchmaking в реальном времени | Размещенный matchmaking |
---|---|
Ваш делегат контроллера представления реализует | Ваш делегат реализует |
Ваши программируемые matchmaking кодируют вызовы | Ваши программируемые вызовы кода |
Ваши программируемые вызовы кода | Ваши программируемые вызовы кода |
Ваша игра получает приглашение. | |
Размещенный обзор соответствий
По умолчанию, когда Вы выполняете процесс matchmaking, Гэйм Кит возвращает экземпляр GKMatch
объект на каждом устройстве соединился с соответствием. Каждое устройство тогда использует свой объект соответствия связаться с другими участниками. Для большинства игр это поведение по умолчанию точно, что Вы хотите. GKMatch
класс абстрагирует топологию базовой сети так, чтобы Ваша игра могла просто фокусироваться на передающих данных другим участникам без Вас имеющий необходимость волноваться о том, как передаются данные.
Однако некоторые игры могут хотеть поддерживать больше проигрывателей, чем максимальное количество поддерживаемых проигрывателей на Игровом Центре или могут хотеть, чтобы их собственный сервер решил соответствие в арбитражном порядке. В этих случаях можно все еще использовать matchmaking для нахождения проигрывателей для размещенного соответствия. Размещенное соответствие не использует GKMatch
объекты. Вместо этого каждая копия Вашей игры получает идентификаторы проигрывателя для всех проигрывателей в соответствии. Ваша игра тогда предпринимает дополнительные шаги для подключения плееров к серверу.
Создание размещенного соответствия требует, чтобы Ваша игра реализовала все низкоуровневые сети, требуемые для Вашей игры. В частности необходимо сделать все следующее в игре:
Разработка и реализация Ваш собственный сетевой код для подключения каждого устройства с сервером.
Разработка и реализация Ваш собственный сетевой протокол для информирования других устройств состояния любого участника соответствия.
Разработка и реализация Ваша собственная реализация сервера для отображения идентификаторов проигрывателя на определенное устройство соединилась с сервером. Таким образом Ваш сервер становится ответственным за маршрутизацию сетевых данных между проигрывателями.
Если Ваша игра использует стандарт Гэйма Кита matchmaking пользовательский интерфейс, необходимо удостовериться, что каждое устройство сообщает Гэйму Киту после того, как это соединяется с сервером. Эта информация позволяет Гэйму Киту обновлять свой пользовательский интерфейс.
Создание размещенного соответствия Используя контроллер представления антрепренера
Для создания размещенного соответствия с помощью антрепренера просматривают контроллер, Вы устанавливаете контроллер представления hosted
свойство к YES
прежде, чем представить контроллер представления. Перечисление 9-1 показывает простой пример этого.
Перечисление 9-1 , Создающее размещенное соответствие
- (IBAction)hostMatch: (id) sender |
{ |
GKMatchRequest *request = [[GKMatchRequest alloc] init]; |
request.minPlayers = 2; |
request.maxPlayers = 2; |
GKMatchmakerViewController *mmvc = [[GKMatchmakerViewController alloc] initWithMatchRequest:request]; |
mmvc.matchmakerDelegate = self; |
mmvc.hosted = YES; |
[self presentViewController:mmvc animated:YES completion:nil]; |
} |
Когда контроллер представления размещается, Ваш делегат реализует matchmakerViewController:didReceiveAcceptFromHostedPlayer:
метод для обработки нового проигрывателя. Ваш делегат должен вести себя по-другому, в зависимости от которого устройства работает Ваша игра:
Когда обращено устройство проигрывателя, устройство должно соединиться с Вашим собственным сервером. Когда успешно соединено, вызовите
setHostedPlayer:connected:
метод, чтобы сказать контроллер представления, что проигрыватель соединился с соответствием.Когда обращено устройство другого проигрывателя, Ваша игра должна решить, что это может говорить с устройством нового проигрывателя через Ваш сервер. Как только это знает, что может отправить сообщения другому клиенту, вызвать
setHostedPlayer:connected:
метод для обновления пользовательского интерфейса.
Отклонение контроллера представления MatchMaking
После того, как все приглашенные приняли запрос соответствия Вашего приложения, Вы отправляете информацию о проигрывателях к серверу, и затем отправляете сообщение начинать-игры всем приглашенным. Когда приглашенные получают сообщение начинать-игры, они должны вручную закрыть контроллер представления для своего приложения.