По моему опыту, для игры для 2 игроков оба игрока должны выполнить addPlayersToMatch, чтобы они снова подключились к игре (и общались назад и вперед через Game Center).
Имеет смысл, что ваши два клиента могут подключиться, если они оба вызывают findAdditionalPlayer, так как оба вызывают addPlayersToMatch.
Если у вас уже есть игра с 2 игроками (скажем, A и B), и вы хотите, чтобы к ней присоединился третий игрок (скажем, C), вам необходимо:
В Игроке A (пригласить C):
GKMatchRequest *request = [[GKMatchRequest alloc] init];
request.minPlayers = 3;
request.maxPlayers = 4;
request.playersToInvite = [NSArray arrayWithObject:playerC_id];
[[GKMatchmaker sharedMatchmaker] addPlayersToMatch:myMatch matchRequest:request completionHandler:nil];
В Игроке B (пригласить C):
GKMatchRequest *request = [[GKMatchRequest alloc] init];
request.minPlayers = 3;
request.maxPlayers = 4;
request.playersToInvite = [NSArray arrayWithObject:playerC_id];
[[GKMatchmaker sharedMatchmaker] addPlayersToMatch:myMatch matchRequest:request completionHandler:nil];
В Игроке C (пригласите A и B):
GKMatchRequest *request = [[GKMatchRequest alloc] init];
request.minPlayers = 3;
request.maxPlayers = 4;
request.playersToInvite = [NSArray arrayWithObjects:playerA_id, playerB_id, nil];
[[GKMatchmaker sharedMatchmaker] addPlayersToMatch:myMatch matchRequest:request completionHandler:nil];
Итак, механизм для воссоединения или добавления новых игроков в матч выглядит так:
- Когда игрок обнаруживает, что удаленный игрок отключился (или добавлен совершенно новый игрок), создайте новый объект запроса на совпадение, включите только идентификатор отключенного / нового игрока в массив PlayersToInvite этого нового запроса на совпадение и выполните с ним addPlayersToMatch.
- Когда отключенный игрок возобновляет работу, создайте новый объект запроса на совпадение, включите все идентификаторы удаленных игроков (вам может потребоваться заранее сохранить их в массиве или получить их из свойства playerIDs вашего GKMatch) в массиве PlayersToInvite запроса на совпадение и выполните addPlayersToMatch с ним.
Другими словами, каждый существующий игрок значительно добавляет нового игрока к своим объектам сопоставления И новый игрок значительно добавляет всех существующих игроков к своему объекту сопоставления.
Для игры для 4 игроков (игроки A, B, C и D, где игрок D является новейшим дополнением):
Игроки A, B и C каждый выполняют свой вызов addPlayersToMatch с объектом запроса на совпадение, у которого playerToInvite состоит только из ID игрока D. Пока игрок D выполняет свой вызов addPlayersToMatch с объектом запроса на совпадение, массив playerToInvite которого содержит A, B, а также идентификаторы playerID C.