Я разрабатываю многопользовательскую онлайн-игру, но у меня проблемы с документацией Apple. (Я пробовал эти руководства Рэя Вендерлихса Часть 1 и part 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];
Окно будет представлено всем пользователям, которых я выберу пригласить. Предположим, первый нажимает ПРИНЯТЬ на приглашении. Какой метод будет запущен в моем приложении, как мне узнать личность пользователя и как узнать, все ли пользователи приняли?
благодаря.