2011-06-09 36 views
7

Necesito recuperar la puntuación presentada por el jugador autenticado de Game Center. Utilizo este código para obtener el puntaje, pero solo obtiene el puntaje más alto (el mejor puntaje de la tabla de clasificación no el puntaje del jugador especificado). ¿Cómo puedo recuperar el puntaje del jugador autenticado?Cómo obtener la tabla de clasificación de puntuaciones más altas del jugador autenticado (Game Center)

- (void) retrievePlayersScore { 
    GKLeaderboard *leaderboardRequest = [[GKLeaderboard alloc] init]; 
    if (leaderboardRequest != nil) { 
     leaderboardRequest.playerScope = GKLeaderboardPlayerScopeGlobal; 
     leaderboardRequest.timeScope = GKLeaderboardTimeScopeAllTime; 
     leaderboardRequest.range = NSMakeRange(1,1); 
     [leaderboardRequest loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) { 
      if (error != nil) { 
       // handle the error. if (scores != nil) 
      } 
      if (scores != nil){ 
       // process the score information. 
       CCLOG(@"My Score: %d", ((GKScore*)[scores objectAtIndex:0]).value); 
      } 
     }]; 
    } 
} 
+0

A través de un montón de búsqueda, creo que es no tiene una forma de hacer esto .. Gracias – ycz

Respuesta

10

Usted puede utilizar el siguiente código:

GKLeaderboard *leaderboardRequest = [[GKLeaderboard alloc] init]; 

leaderboardRequest.identifier = _leaderboardIdentifier; 

if (leaderboardRequest != nil) { 
    [leaderboardRequest loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error){ 
     if (error != nil) { 
      //Handle error 
     } 
     else{ 
      [delegate onLocalPlayerScoreReceived:leaderboardRequest.localPlayerScore]; 
     } 
    }]; 
} 
+0

, orkun Ozbek I Lo intentaré más tarde, ¡espero que funcione! :) – ycz

+0

¿Cuál sería la interfaz de ese método delegado que se llama? – fauxCoder

+0

Gracias, hombre, resuelve mi problema. –

5

También puede tratar de iniciar la tabla de líderes mediante el uso de una matriz de ID del jugador (s) con el fin de reducir el número de jugadores:

GKLeaderboard *board = [[[GKLeaderboard alloc] initWithPlayerIDs:[NSArray arrayWithObject:myGCPlayerID]] autorelease]; 
6

sólo hay que golpear loadScoresWithCompletionHandler para un determinado GKLeaderboard, automáticamente board.localPlayerScore se llenará de ese foro.

Así, por ejemplo,

- (void) getLoadLeaderboardPositions 
{ 
    [GKLeaderboard loadLeaderboardsWithCompletionHandler:^(NSArray *leaderboards, NSError *nsError) { 
    if(nsError != nil) 
    { 
     error(nsError, "get leaderboard score") ; 
     return ; 
    } 

    for(GKLeaderboard* board in leaderboards) 
    { 
     // fetch score for minimum amt of data, b/c must call `loadScore..` to get MY score. 
     board.playerScope = GKLeaderboardPlayerScopeFriendsOnly ; 
     board.timeScope = GKLeaderboardTimeScopeAllTime ; 

     NSRange range = {.location = 1, .length = 1}; 
     board.range = range ; 

     [board loadScoresWithCompletionHandler:^(NSArray *scores, NSError *error) { 
     printf("YOUR SCORE ON BOARD %s WAS %lld\n", [board.title UTF8String], board.localPlayerScore.value) ; 
     }] ; 
    } 
    }] ; 
} 
0

Versión actualizada utilizando Swift

let localPlayer = GKLocalPlayer.localPlayer() 

if localPlayer.isAuthenticated { 
    let leaderboard = GKLeaderboard(players: [localPlayer]) 
    leaderboard.identifier = LEADERBOARD_ID 
    leaderboard.timeScope = .allTime 
    leaderboard.loadScores(completionHandler: { 
     (scores, error) in 

     let bestScore = scores?.first?.value 

     if bestScore != nil { 
      // Do something with bestScore 
     } 
    }) 
} 
Cuestiones relacionadas