2011-06-09 18 views
7

Muszę pobrać wynik przesłany przez gracza uwierzytelnionego z Game Center. Używam tego kodu, aby uzyskać wynik, ale dostaje on tylko najlepszy wynik (najlepszy wynik w tabeli liderów, a nie wynik konkretnego gracza). Jak mogę odzyskać wynik uwierzytelnionego gracza?Jak zdobyć tabelę liderów z najwyższymi wynikami w postaci uwierzytelnionego gracza (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

przez wiele poszukiwań, myślę, że to nie jest sposób to zrobić .. – ycz

Odpowiedz

10

można użyć następującego kodu:

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

Dzięki, Orkun Ozbek I Spróbuję później, mam nadzieję, że zadziała! :) – ycz

+0

Jaki byłby interfejs wywoływanej metody delegatów? – fauxCoder

+0

Dzięki stary, rozwiązuje mój problem. –

5

Można także spróbować zainicjować płytę lidera za pomocą tablicy ID gracza (y) w celu zawężenia liczby graczy:

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

po prostu trzeba trafić loadScoresWithCompletionHandler dla danego GKLeaderboard, a następnie automatycznie board.localPlayerScore zostaną wypełnione do tej płyty.

Tak na przykład,

- (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

Zaktualizowana wersja korzystając 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 
     } 
    }) 
} 
Powiązane problemy