Обзор Matchmaking

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

Центр Гэйма matchmaking обеспечивает, инфраструктура должна была позволить проигрывателям считать другие проигрыватели заинтересованными игрой в соответствии. Это позволяет проигрывателям приглашать определенные проигрыватели — почти всегда друга — или просто находить другие проигрыватели, ища соответствие в Вашей игре. Как только те проигрыватели были обнаружены и сформированы в соответствие, Центр Гэйма упрощает для Вас реализовывать сетевой код, необходимый для Вашей игры. Когда необходимо, Гэйм Кит направляет сетевые данные через серверы Центра Гэйма так, чтобы все участники соответствия были подключены друг к другу, независимо от того, где они или какая сеть они идут.

Matchmaking на Игровом Центре является сложной темой, поскольку существует много видов соответствий, которые можно создать и много способов создать их. Эта глава обеспечивает обзор процесса. Следующие главы предоставляют подробную информацию об определенных видах соответствий тот Игровой Центр предложения.

Игровой центр поддерживает многократные виды соответствий

Таблица 7-1 перечисляет различные виды соответствий, поддерживаемых Игровым Центром matchmaking. Каждый вид соответствия имеет различные ограничения и возможности.

Табличный 7-1  Игровой Центр соответствует типы

Тип соответствия

Описание

В реальном времени

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

Основанный на повороте

Состояние соответствия сохранено на Игровых серверах Центра. Это передается участникам при необходимости. Участники соответствия не подключены друг к другу и подключены к Игровому Центру только, когда они хотят считать или записать данные соответствия. Когда проигрыватель принимает оборот, его экземпляр игры обновляет данные соответствия, хранившие на Игровом Центре. Игровой Набор предоставляет поддержку для этого соответствия, вводят GKTurnBasedMatch класс.

Саморазмещенный

Сетевая реализация, предоставленная Вашей игрой и Вашими собственными серверами. При создании размещенного соответствия Игровой Центр помогает Вам найти проигрыватели для своего соответствия (matchmaking), но полагается на Вашу игру для реализации ее собственного низкоуровневого сетевого кода. Это прежде всего предназначается для игр, уже имеющих существующие реализации сети.

Игровой центр обеспечивает многократные способы подключить плееры в соответствие

Игровой Центр делает максимально простым для Вашей игры подключить плееры в соответствие:

Проигрыватель может быть приглашен присоединиться к соответствию, даже когда игра не запускается на устройстве того проигрывателя. Когда проигрыватель отправляется приглашение, уведомление нажатия отправляется в устройство того проигрывателя. Когда проигрыватель принимает приглашение, игра запускается сразу для обработки приглашения. Это поведение важно, потому что оно увеличивает вероятность проигрывателей, играющих в Вашу игру. Фактически, проигрыватель может быть приглашен играть в достойном игры, которой он или она не владеет. В этом случае проигрывателю сразу предлагают возможность купить и загрузить Вашу игру.

Matchmaking и Gameplay являются отдельными задачами

Нахождение проигрывателей для соответствия является отличным поведением, отличающимся от того, чтобы фактически сыграть матч. При большинстве обстоятельств matchmaking и геймплея происходят в разное время. Типичное поведение для большинства игр состоит в том, чтобы сначала создать соответствие и затем сыграть матч. Однако другие сценарии возможны:

Можно соответствовать через различные версии игры

В Подключении iTunes можно предоставить информацию совместимости, описывающую, какие версии игры видят друг друга во время процесса matchmaking. Каждая совместимая группа устройств и версии Вашей игры являются соответствующими как отдельные группы. Возможность создать эти matchmaking группы довольно гибка:

Для получения дополнительной информации о конфигурировании многопользовательской совместимости см. Распределительные Игровые Приложения Центра.

Создание любого вида соответствия запускается с запроса соответствия

Все новые матчи начинаются с запросом соответствия, описывающим желаемые параметры для соответствия. По существу запрос соответствия говорит Центру Гэйма сколько проигрывателей находить и который проигрыватели найти для соответствия. Гэйм Кит также использует запрос соответствия для настройки его matchmaking поведения. Например, когда Ваша игра выводит на экран стандарт matchmaking интерфейс, запрос используется для настройки появления экрана. Способ, которым запросы соответствия использования Гэйма Кита и Гэйма Сентера описаны в более поздних главах для каждого типа соответствия. Однако, потому что все соответствия совместно используют общую инфраструктуру, необходимо понять, как создать и сконфигурировать запрос соответствия прежде, чем считать другие главы.

При разработке инфраструктуры соответствия игры запустите путем реализации основной поддержки matchmaking и получите сетевую игровую работу. Затем рассмотрите добавление некоторых из большего количества расширенных функций.

Запрос соответствия определяется в Гэйме Ките GKMatchRequest класс. Таблица 7-2 перечисляет свойства запроса соответствия.

Таблица 7-2  Важные свойства запроса соответствия

Свойство

Описание

minPlayers

Минимальное число игроков для нахождения для соответствия. Это свойство должно быть установлено по каждому запросу соответствия. Посмотрите, что Запрос Соответствия Должен Указать Число игроков в Соответствии.

maxPlayers

Максимальное количество проигрывателей для нахождения для соответствия. Это свойство должно быть установлено по каждому запросу соответствия. Посмотрите, что Запрос Соответствия Должен Указать Число игроков в Соответствии.

defaultNumberOfPlayers

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

playersToInvite

Дополнительное свойство, объявляющее, что список проигрывателя IDs для ряда проигрывателей приглашает в соответствие. Посмотрите Приглашение Списка Проигрывателей.

inviteMessage

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

playerGroup

Дополнительное свойство, позволяющее Вам создавать отличные подмножества проигрывателей в Вашей игре. Каждое подмножество является соответствующим отдельно друг против друга. Используйте эти подмножества, чтобы позволить проигрывателям предоставлять больше информации о точно, какое соответствие они ищут. Посмотрите Player Groups.

playerAttributes

Дополнительное свойство, позволяющее Вам указывать отличную роль проигрыватель, хочет играть в соответствии. Используйте атрибуты проигрывателя, чтобы позволить проигрывателям определять, какой или как они хотят играть в Вашу игру. Посмотрите Атрибуты Проигрывателя.

Запрос соответствия должен указать число игроков в соответствии

Перечисление 7-1 показывает простой запрос соответствия. Все запросы соответствия требуются, чтобы устанавливать минимальные и максимальные проигрыватели для соответствия; Игровой Центр уважает эти границы и всегда гарантирует, что финальный матч имеет корректное число игроков.

Перечисление 7-1  простой запрос соответствия

GKMatchRequest *request = [[GKMatchRequest alloc] init];
request.minPlayers = 2;
request.maxPlayers = 2;
request.defaultNumberOfPlayers = 2;

Минимальное число игроков должно быть, по крайней мере, 2. Максимальное количество позволенных проигрывателей варьируется в зависимости от вида создаваемого соответствия. Таблица 7-2 перечисляет текущий максимум; этот максимум подвержен изменениям.

Табличное 7-3  Максимальное количество проигрывателей для каждого вида соответствия

Тип соответствия

Максимальное количество проигрывателей

Одноранговый

4

Размещенный

16

Основанный на повороте

16

Во время выполнения Ваша игра вызывает maxPlayersAllowedForMatchOfType: метод для определения точного числа игроков допускал каждый вид соответствия.

Приглашение списка проигрывателей

По умолчанию Игровой Центр использует запрос соответствия, чтобы найти, что другие проигрыватели ожидания заполняют соответствие. Например, если соответствие требует, чтобы четыре человека присутствовали, прежде чем оно сможет запуститься, затем Игровой Центр находит четырех ожидающих участников, формирует их в соответствие, и затем возвращает то соответствие. Этот сценарий полезен, потому что он позволяет ожидать проигрыватели, которые будут быстро соответствующими вместе. Однако не все хотят играть с рандомизированным набором проигрывателей каждый раз, когда матч сыгран. Часто, проигрыватели хотят играть в частности против друзей. Поэтому стандартный пользовательский интерфейс позволяет проигрывателю приглашать определенных друзей для игры. Однако Ваша игра может также принять решение предоставить эту поддержку программно путем присвоения массива строк идентификатора проигрывателя к запросу соответствия.

Обеспечение списка проигрывателей изменяет Игровое поведение при сравнении Центра. Вот несколько примеров того, как изменяется поведение:

  • Стандартный пользовательский интерфейс позволяет проигрывателю выбирать определенный слот в соответствии и приглашать определенное лицо заполнять его. Игровой Набор резервирует места для приглашенных проигрывателей, пока они не отвечают, или процесс испытывает таймаут.

  • Если Вы используете программируемый интерфейс для создания соответствия в реальном времени, и Вы обеспечиваете список проигрывателей, чтобы пригласить, Играть, Центр пытается добавить только те проигрыватели в соответствие. Это не выполняет нормальный процесс matchmaking. Однако, если соответствию нужно больше проигрывателей, Ваша игра может создать другой запрос соответствия, выполняющий нормальный matchmaking. Это разделение способов поведения позволяет, Вы для точного управления, когда рандомизировано matchmaking происходите.

  • В основанном на повороте соответствии проигрыватели сразу добавляются к соответствию, но проигрыватель отправляется приглашение присоединиться к соответствию только, когда это становится очередью того проигрывателя.

Player Groups

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

Группа проигрывателя определяется 32-разрядным целым числом без знака. Когда Вы устанавливаете playerGroup свойство на соответствии запрашивает 0, тогда проигрыватель может быть соответствующим в любое соответствие ожидания. Когда Вы устанавливаете playerGroup свойство к ненулевому числу, тогда проигрыватель является соответствующим только с проигрывателями, запросы соответствия которых совместно используют то же число группы проигрывателя. Как правило, если Ваша игра использует группы проигрывателя, она обеспечивает пользовательский интерфейс, позволяющий проигрывателю выбирать точные опции, которыми он или она интересуется. Это берет выбор проигрывателя и комбинирует их для формирования числа группы проигрывателя.

Вот некоторые примеры того, как можно разделить список проигрывателей:

  • Отдельные проигрыватели уровнем квалификации.

  • Отдельные проигрыватели рядом правил раньше признавали соответствие.

  • Отдельные проигрыватели на основе карты соответствие играются на.

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

Перечисление 7-2 показывает, как Вы могли бы сконфигурировать запрос соответствия, использующий группу проигрывателя. В этом примере значение группы проигрывателя вычисляется путем выбора и карты, которую проигрыватель хочет играть на и набор правил, под которым проигрыватель хочет играть. Константа для каждого выбрана, и эти два являются поразрядным ORed вместе для создания уникального числа для группы проигрывателя. Игровой Центр только ищет другие проигрыватели с той же картой и комбинацией группы.

Перечисление 7-2  , Создающее группу проигрывателя на основе карты и правила, установлено

GKMatchRequest *request = [[GKMatchRequest alloc] init];
request.minPlayers = 2;
request.maxPlayers = 4;
request.playerGroup = MyMap_Forest | MyRulesCaptureTheFlag;

Атрибуты проигрывателя

Атрибут проигрывателя позволяет проигрывателю выбирать роль, которую он или она хочет играть в соответствии. С атрибутами проигрывателя каждый проигрыватель может выбрать определенную роль, и Игровой Центр находит, что надлежащее соединение проигрывателей гарантирует, что все роли заполнены.

Вот некоторые способы, которыми можно использовать атрибуты проигрывателя в игре:

  • Игра как шахматы может использовать атрибуты проигрывателя, чтобы определить, хочет ли проигрыватель быть черными или белыми частями.

  • Ролевая игра может предложить различные символьные роли с отличными сильными местами, слабыми местами и возможностями, которые проигрыватель приносит к соответствию.

  • Спортивная игра может использовать атрибуты проигрывателя, чтобы позволить проигрывателям указывать позиции, такие как питчер или квотербек, в команде.

  • Основанное на повороте соответствие может присвоить различные расположения на карте отличным фракциям и использовать атрибуты, чтобы гарантировать, что каждое расположение заполнено.

Атрибуты проигрывателя имеют несколько ограничений:

  • Роли проверяются только на автосоответствующие проигрыватели. Если проигрыватель приглашает друзей присоединяться к соответствию, друзья не выбирают роль и не устанавливали атрибут.

  • Роли не выведены на экран в стандартном пользовательском интерфейсе для matchmaking, предоставленного Гэймом Китом. Ваша игра должна обеспечить свой собственный пользовательский интерфейс, чтобы позволить проигрывателям выбирать роль.

  • Объект соответствия возвратился к Вашей игре, не говорит Вам, какие роли проигрыватели выбрали. Ваша игра должна отправить информацию о ролевом выборе отдельно после того, как будет создаваться соответствие.

  • Ваша игра определяет полный набор ролей; все роли, определенные Вашей игрой, должны быть заполнены к тому времени, когда создается соответствие. Поскольку это требует тщательную координацию между ролями, которые Вы определяете и число игроков, позволенное в соответствии. Таким образом атрибуты проигрывателя требуют дополнительного проекта и усилия по тестированию.

Реализация атрибутов проигрывателя

Атрибуты проигрывателя реализованы с помощью playerAttributes свойство по запросу соответствия. По умолчанию значение этого свойства 0, что означает, что проигнорировано свойство атрибутов. Если значение свойства является ненулевым, Игровой Центр использует его для соответствия определенной роли.

Для создания ролей, проигрыватель может играть в игре, Вы создаете 32-разрядную маску для каждой роли, которую может исполнять проигрыватель. Вам решать для добавления настроенного пользовательского интерфейса в игре, позволяющей проигрывателю выбирать роль. Вы устанавливаете playerAttributes свойство на соответствии запрашивает к маске на выбор проигрывателя, как показано в Перечислении 7-3. Затем выполните стандартный или пользовательский matchmaking, как Вы обычно были бы.

Перечисление 7-3  , Устанавливающее проигрыватель, приписывает по запросу соответствия

GKMatchRequest *request = [[GKMatchRequest alloc] init];
request.minPlayers = 4;
request.maxPlayers = 4;
request.playerAttributes = MyRole_Wizard;

Если Игровой Центр видит ненулевой атрибут проигрывателя в запросе соответствия, он добавляет проигрыватели к соответствию разумно так, чтобы все проигрыватели, объединено с помощью логической операции OR, имели полную маску FFFFFFFFh.

Алгоритм примерно походит на это:

  1. Маска соответствия запускается с маски привлекательного проигрывателя.

  2. Игровой Центр ищет проигрыватели с запросами соответствия, имеющими ненулевое значение атрибутов проигрывателя. Игровой Центр ищет проигрыватели, маски которых включают биты набора, которые в настоящее время не находятся в маске соответствия.

  3. После того, как проигрыватель добавляется к соответствию, значением значения атрибутов проигрывателя нового проигрывателя является логически ORed в маску соответствия.

  4. Если маска соответствия не равняется FFFFFFFFh, Игровой Центр ищет другие проигрыватели для присоединения к соответствию. Если соответствие завершено, но игра все еще требует, чтобы больше проигрывателей достигло минимума, Игровой Центр продолжает искать больше проигрывателей для добавления.

Проигрыватель приписывает пример: ролевая игра

Предположите создание ролевой игры с четырьмя ролями: Борец, Мастер, Вор и Клерикал. Каждое соответствие состоит из четырех проигрывателей, и соответствие должно иметь один и только один проигрыватель для каждой роли. Для реализации этого требования игра создает маски для каждой роли, соответствующей алгоритм с четырьмя шагами, описанный ранее. Перечисление 7-4 обеспечивает набор в качестве примера масок.

Перечисление 7-4  , Создающее маски для классов символов

#define MyRole_Fighter 0xFF000000
#define MyRole_Cleric 0x00FF0000
#define MyRole_Wizard 0x0000FF00
#define MyRole_Thief 0x000000FF
../Art/player_attributes_2x.png

Ни одно из ролевого перекрытия масок; если к каким-либо двум маскам присоединяется AND, получающееся значение всегда 00000000h. Когда всеми четырьмя ролевыми масками является логически ORed вместе, вся маска соответствия заполнена (FFFFFFFFh). Это гарантирует в соответствии с четырьмя проигрывателями, что каждая роль заполнена точно один раз.

Проигрыватель приписывает пример: шахматы

Для шахмат Вы могли бы хотеть позволить проигрывателям выбирать, хотят ли они играть черные части, белые части, или они не заботятся о том, что окрашивает, они запускают с. Перечисление 7-5 обеспечивает набор в качестве примера масок для этого проекта.

Перечисление 7-5  , Создающее маски для шахмат

#define MyRole_Black  0xFFFF0000
#define MyRole_White  0x0000FFFF
#define MyRole_Either 0xFFFFFFFF

Шахматная партия всегда требует двух проигрывателей, таким образом, с этими масками существует четыре возможных комбинации проигрывателей, которые могут удовлетворить условие для завершенной маски:

  • Один черный проигрыватель и один белый проигрыватель

  • Один не заботящийся белый проигрыватель и один проигрыватель

  • Один не заботящийся черный проигрыватель и один проигрыватель

  • Два проигрывателя, не заботящиеся, который цвет их части

  Число Добавления рисунка 7-1, показывающее шахматные комбинации