2012-08-27 25 views
6

Tengo un juego para dos jugadores basado en turnos de iOS que usa el centro de juegos y GKTurnbasedMatch.Juego iOS Game Match basado en turnos Programatica Rematch

¿Hay alguna manera de volver a emparejar programáticamente un oponente después de que un partido haya terminado?

Me gustaría darles a los jugadores acceso de un botón para comenzar un nuevo partido el uno con el otro.

Si no hay un enfoque de un botón, ¿cuáles son algunas alternativas potenciales?

+1

¡Buenas noticias! Esto ahora es muy fácil de hacer con iOS6 simplemente use la rematchWithCompletionHandler de GKTurnBasedMatch. –

Respuesta

4

De hecho, parece una solución programática completa está siendo ignorada por el centro de juego. Un dolor, sin duda. Pruebe lo siguiente en su @selector (doRematchTap) ... o algún equivalente:

NSMutableArray *playerIds = [NSMutableArray array]; 
    GKTurnBasedParticipant *otherPlayer = /* Get the other player some way */; 
    GKTurnBasedParticipant *myParticipant = /* Get yourself a very similar way*/; 

    [playerIds addObject:myParticipant.playerID]; 
    if (otherPlayer.playerID) { 
     [playerIds addObject:otherPlayer.playerID]; 
    }// sanity check 

    GKMatchRequest *request = [[GKMatchRequest alloc] init]; 
    request.playersToInvite = playerIds; 
    request.minPlayers = 2; 
    request.maxPlayers = 2; 

    GKTurnBasedMatchmakerViewController *tbmcv = [[GKTurnBasedMatchmakerViewController alloc] initWithMatchRequest:request]; 
    tbmcv.showExistingMatches = NO; 
    tbmcv.turnBasedMatchmakerDelegate = /* Your normal delegate for the callbacks */; 

    [self presentViewController:tbmcv 
         animated:YES 
        completion:^{ 
         }]; 

importante tener en cuenta las showExistingMatches = NO, que saltarán al controlador de la vista a la derecha en el modo de emparejamiento con el usuario correcto pre-seleccionado (parece), y no muestra las coincidencias existentes del usuario.

+0

¡Gracias! El truco fue establecer showExistingMathes en NO. No es exactamente lo que quería (el usuario aún tiene que hacer clic en "Siguiente" y "Enviar, pero permite revanchas mucho más fáciles." –

+1

iOS6 tiene una nueva API para realizar una revancha sin requerir la interfaz del centro de juegos. El método es: GKTurnBasedMatch-> rematchWithCompletionHandler –

1

no tengo toda la solución, sino una idea para usted:

Cada jugador tiene un único jugador-ID, que se puede obtener, si lo guarda lejos después de un

didReceiveData:(NSData *)data fromPlayer:(NSString *)playerID

Ahora puede iniciar programáticamente una nueva coincidencia e invitar a este jugador. Se le preguntará si quiere una revancha y luego podrá volver a jugar.

Sé que esto no es mucho de código o consejo concreto, pero tal vez es suficiente información para encontrar el resto en el GameKit Class Reference.

Me pregunto si puede resolverlo, dígame si lo hizo y ¡buena suerte!

Editar:

He buscado en el references y encontramos que:

- (void) loadPlayerData: (NSArray *) identifiers 

yo no probé a mí mismo, sino que debe obtener el reproductor de esta manera otra vez, si almacenar su identificador en una matriz y pasarlo a esta función.

espero que traen algunos cambios en iOS6 para Game Center, que puede hacer que sus partidos mediante programación en su propio camino ...

+0

No creo que esto sea posible actualmente. El método que conozco para enviar una solicitud de coincidencia mediante programación es findMatchForRequest: withCompletionHandler. Tiene la siguiente declaración en su documentación: la propiedad playersToInvite de la solicitud de coincidencia se ignora; para invitar a un conjunto específico de jugadores al partido, debe mostrar la interfaz de usuario estándar. –

Cuestiones relacionadas