Game Center Поиск совпадения программно

Я просто не могу понять, как это работает. То, что я пытаюсь сделать, - это позволить двум игрокам играть в игру, если третий игрок присоединяется к нему, и он может немедленно присоединиться к игре, если четвертый и последний игрок присоединяется, он также может мгновенно присоединиться к игре. Они также могут выйти из игры в любое время по любой причине, если это произойдет, должно быть место, открытое для другого человека или для того же человека, чтобы восстановить соединение. Это идея.

Теперь я получил следующее. Я аутентифицирую местного игрока по понятным причинам. Затем я ищу совпадение так:

if (matchRequest) [matchRequest release];
matchRequest            = [[GKMatchRequest alloc] init];
matchRequest.minPlayers = 2;
matchRequest.maxPlayers = 4;

[[GKMatchmaker sharedMatchmaker] findMatchForRequest:matchRequest withCompletionHandler:^(GKMatch *match, NSError *error) {
    if (error) {
        // An error occured
    } else {
        if (matchCurrent) [matchCurrent release];
        matchCurrent          = [match retain];
        matchCurrent.delegate = self;
    }
}];

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

Я обнаружил, что когда я нажал его на первом устройстве, наконец, третье устройство могло найти совпадение, в котором находились первое и второе устройства. Фактически, второе и третье устройства содержали идентификаторы игроков каждого задействованного устройства. Что хорошо. Но есть две проблемы.

Какое устройство на самом деле должно вызывать метод addPlayersToMatch? И как вы можете ограничить это одним устройством, выполняющим этот метод? Плюс, когда ты должен это назвать?

Почему на устройстве, вызывающем этот метод, не обновляются идентификаторы игроков?

[[GKMatchmaker sharedMatchmaker] addPlayersToMatch:matchCurrent matchRequest:matchRequest completionHandler:^(NSError *error) {
    //matchCurrent.playerIDs is not updated?!
}]; 

На самом деле они обновляются. Когда я вижу, что идентификаторы игроков появляются на втором и третьем устройствах, я вручную обновляю идентификаторы matchCurrent.player на первом устройстве, и вдруг он распознает плеер. Однако даже «didChangeState» для игрока не вызывается, когда новый игрок обнаружен на первом устройстве.

Ответы на вопрос(3)

Ваш ответ на вопрос