Я просто не могу понять, как это работает. То, что я пытаюсь сделать, это позволить двум игрокам играть в игру, если третий игрок присоединяется к ней, может мгновенно присоединиться к игре, если четвертый и последний игрок присоединятся к ней, она также может мгновенно присоединиться к игре. Они могут также покинуть игру в любое время по любой причине, если это произойдет, должно быть пространство, открытое для другого человека или для того, чтобы тот же человек снова подключался. Это идея.Игровой центр Поиск соответствия программно
Теперь я получил следующее. Я удостоверяю местный игрок по очевидным причинам. Тогда я искать матч так:
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, который я сохранил, чтобы добавить больше игроков. К счастью, этот метод существует, но как это будет работать? Когда вы называете это в этом случае? Я решил поставить его под кнопку, чтобы я мог вручную выполнить его, когда совпадение найдено.
Что я обнаружил, так это то, что когда я нажал его на первом устройстве, наконец, третье устройство могло найти совпадение с первым и вторым устройством. Фактически второе и третье устройство содержали идентификаторы player каждого устройства. Что хорошо. Но есть две проблемы.
- Какое устройство должно фактически вызывать метод addPlayersToMatch? И как вы можете ограничить его одним устройством, выполняющим этот метод? Плюс, когда вы это называете?
Почему на устройстве, вызывающем этот метод, не обновляется идентификатор игрока?
[[GKMatchmaker sharedMatchmaker] addPlayersToMatch:matchCurrent matchRequest:matchRequest completionHandler:^(NSError *error) { //matchCurrent.playerIDs is not updated?! }];
На самом деле они обновляются. Когда я вижу, что идентификаторы player появляются на втором и третьем устройствах, я вручную обновляю идентификаторы matchCurrent.playerID на устройстве один, и вдруг он распознает плеер. Однако даже «didChangeState» для игрока не вызывается, когда новый игрок обнаружен на устройстве один.
ли это на основе модели клиент-сервер или модель p2p? Что используется для инициализации соединения, tcp, udp, http? Где хранятся данные для подключенных в данный момент игроков? –
«То, что я пытаюсь сделать, это позволить двум игрокам играть в игру, если присоединяется третий игрок». Можете ли вы добавить несколько точек с запятой и запятыми в свои 2 и 3 предложения? Как и в предвыборных предложениях, трудно определить, изменяет ли каждое if-предложение предыдущее или следующее независимое предложение. – LarsH