2011-01-09 3 views
6

пытается реализовать мультиплеер. Использование образца от Game Center - Sending and receiving data.GameCenter Invitation Handler

Все, кажется, хорошо, но в apple documentation также говорится о приглашении.

[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]; 
    } 
}; 

Проблема довольно проста: я не знаю, где добавить этот код.

+0

EXACT же вопрос пришел мне в голову;) \ – Mazyod

ответ

11

Как указано в документации

Ваше приложение должно установить обработчик приглашение еще в возможной после того, как ваше приложение запущен; подходящее место для установки , обработчик находится в блоке завершения , который вы выполнили после того, как локальный игрок прошел аутентификацию.

Где-то в вашем коде, вы должны иметь подлинность местного игрока с чем-то вроде этого

[[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:^(NSError *error) { 
    if (error == nil) { 
     // Insert your piece of code here 
    } else { 
     // Handle the error 
    } 
}]; 

Надежда, что помогает

+0

Моя проблема. Не читал все. Извините за глупый вопрос. – 0xDE4E15B

+1

Мы все это сделали, ничего страшного :) – Jilouc

+0

Здравствуйте. Не могли бы вы увидеть мой вопрос? http://stackoverflow.com/questions/10970538/how-to-accept-an-invitation-in-game-center –

1

Мой код ниже, и она работает очень хорошо. В authenticateLocalUser, добавьте код ниже:

[[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:^(NSError *error) { 
    [GKMatchmaker sharedMatchmaker].inviteHandler = ^(GKInvite *acceptedInvite, NSArray *playersToInvite) { // Add for invite handler 
     // Insert application-specific code here to clean up any games in progress. 
     if (acceptedInvite) { 
      GKMatchmakerViewController *mmvc = [[GKMatchmakerViewController alloc] initWithInvite:acceptedInvite] ; 
      mmvc.matchmakerDelegate = self; 
      // [self presentModalViewController:mmvc animated:YES]; 
      [_delegate matchStart]; 
     } else if (playersToInvite) { 
      GKMatchRequest *request = [[GKMatchRequest alloc] init] ; 
      request.minPlayers = 2; 
      request.maxPlayers = 2; 
      request.playersToInvite = playersToInvite; 

      GKMatchmakerViewController *mmvc = [[GKMatchmakerViewController alloc] initWithMatchRequest:request] ; 
      mmvc.matchmakerDelegate = self; 
      // [self presentModalViewController:mmvc animated:YES]; 
      [_delegate matchStart]; 
     } 
    }; 

    [self callDelegateOnMainThread:@selector(processGameCenterAuth:) withArg:NULL error:error]; 
}];