Я занимаюсь разработкой многопользовательской онлайн-игры, но я борюсь с документацией Apple. (Я пробовал эти уроки Рэя Вендерлиха Часть 1 и Часть 2 , но они не работают (совпадение никогда не начинается, потому что приглашающее устройство никогда не получает подтверждение совпадения).
Поскольку эта тема обширна, я создам один вопрос, а затем перейду к созданию другого вопроса для SO, если это необходимо.
Я хочу создать многопользовательскую онлайн-игру, которая позволит пользователю приглашать от 1 до 3 человек. Таким образом, это будет матч от 2 до 4 человек. Игра не основана. Он жив и данные для передачи между пользователями минимальны.
Давайте начнем с основных вещей.
1) первое, что я делаю, это создаю уведомление
if (self.gameCenterAvailable) {
NSNotificationCenter *nc =
[NSNotificationCenter defaultCenter];
[nc addObserver:self
selector:@selector(authenticationChanged)
name:GKPlayerAuthenticationDidChangeNotificationName
object:nil];
}
, чтобы сообщить мне об изменении уведомления. Когда это происходит, метод authenticationChanged сработает ... вот он
- (void)authenticationChanged {
GKMatchmaker sharedMatchmaker].inviteHandler = ^(GKInvite *acceptedInvite, NSArray *playersToInvite) {
// Insert application-specific code here to clean up any games in progress.
if (acceptedInvite)
{
GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithInvite:acceptedInvite] autorelease];
mmvc.matchmakerDelegate = self;
[self presentModalViewController:mmvc animated:YES];
}
else if (playersToInvite)
{
GKMatchRequest *request = [[[GKMatchRequest alloc] init] autorelease];
request.minPlayers = 2;
request.maxPlayers = 4;
request.playersToInvite = playersToInvite;
GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithMatchRequest:request] autorelease];
mmvc.matchmakerDelegate = self;
[self presentModalViewController:mmvc animated:YES];
}
};
}
Я взял этот код у Apple. Мой вопрос здесь такой. Если Apple заявляет, что запускает этот код после аутентификации пользователя, почему он проверяет приглашение или приглашает пользователей? Насколько я вижу, пользователи еще не были приглашены. Если код не выполняется в то время, верно? Он просто будет сидеть в памяти, ожидая, когда его вызовут, КОГДА приглашение сделано, правильно?
Если это так, я сейчас создаю приглашение на матч, делая
[self dismissModalViewControllerAnimated:NO];
GKMatchRequest *request = [[[GKMatchRequest alloc] init] autorelease];
request.minPlayers = minPlayers;
request.maxPlayers = maxPlayers;
request.playersToInvite = self.pendingPlayersToInvite;
GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithMatchRequest:request] autorelease];
mmvc.matchmakerDelegate = self;
[self presentModalViewController:mmvc animated:YES];
Окно будет доступно всем пользователям, которых я хочу пригласить. Предположим, что первый человек нажимает ПРИНЯТЬ на приглашение. Какой метод будет запущен в моем приложении, как я могу получить идентификационные данные пользователя и как я узнаю, что все пользователи приняли?
спасибо.