Я просто не могу понять, как это работает. Что я пытаюсь сделать, так это позволить двум игрокам играть в игру, если к ней присоединяется третий игрок, он может мгновенно присоединиться к игре, если присоединяется четвертый и последний игрок, он также может мгновенно присоединиться к игре. Они также могут покинуть игру в любое время по любой причине, если это произойдет, должно быть место, открытое для другого человека или для того же человека, чтобы повторно подключиться. Это идея.
Теперь я получил следующее. Я аутентифицирую локального игрока по понятным причинам. Затем я ищу совпадение следующим образом:
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, который я сохранил, чтобы добавить больше игроков. К счастью, такой метод существует, но как он будет работать? Когда вы это называете в этом случае? Я решил поместить его под кнопку, чтобы я мог вручную запустить его, когда будет найдено совпадение.
Я обнаружил, что когда я нажимал его на первом устройстве, наконец, третье устройство могло найти совпадение первого и второго устройства. На самом деле второе и третье устройства содержали идентификаторы playerID каждого задействованного устройства. Что хорошо. Но есть две проблемы.
Почему, на устройстве, вызывающем этот метод, не обновляются ли идентификаторы playerID?
[[GKMatchmaker sharedMatchmaker] addPlayersToMatch: matchCurrent matchRequest: matchRequest ЗавершениеHandler: ^ (NSError * ошибка) {
//matchCurrent.playerIDs не обновляется ?!
}];
Собственно они обновлены. Когда я вижу, что идентификаторы playerID появляются на втором и третьем устройстве, я вручную обновляю matchCurrent.playerID на первом устройстве, и внезапно оно распознает игрока. Однако даже 'didChangeState' для player не вызывается, когда новый проигрыватель обнаруживается на устройстве 1.