2011-01-09 11 views
6

tratando de implementar un modo multijugador. Usando la muestra de Game Center - Sending and receiving data.GameCenter Invitation Handler

Todo parece estar bien, pero en apple documentation también se dice sobre el controlador de invitación.

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

El problema es bastante simple: no sé dónde agregar este código.

+0

exactamente la misma pregunta vino a la mente;) \ – Mazyod

Respuesta

11

Como se indica en los documentos

Su aplicación debe establecer el manejador invitación tan pronto como sea posible después de su aplicación se lanzó ; un lugar apropiado para establecer el controlador está en el bloque de finalización que proporcionó, que se ejecuta después de que el reproductor local esté autenticado.

En algún lugar de su código, usted debe haber autenticado el jugador local con algo como esto

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

Espero que ayude

+0

Mi problema. No he leído todo. Lo siento por una pregunta tonta. – 0xDE4E15B

+1

Todos hemos hecho esto, no es gran cosa :) – Jilouc

+0

Hola. ¿Podrías ver mi pregunta? http://stackoverflow.com/questions/10970538/how-to-accept-an-itation-in-game-center –

1

Mi código está por debajo, y funciona muy bien. En el authenticateLocalUser, añadir el código de abajo:

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