Я просто не могу понять, как это работает.То, что я пытаюсь сделать, - это позволить двум игрокам играть в игру, если третий игрок присоединяется к нему, и он может немедленно присоединиться к игре, если четвертый и последний игрок присоединяется, он также может мгновенно присоединиться к игре.Они также могут выйти из игры в любое время по любой причине, если это произойдет, должно быть место, открытое для другого человека или для того же человека, чтобы восстановить соединение.Это идея.
Теперь я получил следующее.Я аутентифицирую местного игрока по понятным причинам.Затем я ищу соответствие следующим образом:
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» для игрока не вызывается, когда новый игрок обнаружен на первом устройстве.