2011-06-09 5 views
7

Tôi cần truy xuất điểm được gửi của người chơi đã xác thực từ Trung tâm trò chơi. Tôi sử dụng mã này để có được điểm số, nhưng nó chỉ nhận được điểm số cao nhất (điểm số tốt nhất của bảng thành tích không phải là điểm số của người chơi được chỉ định). Làm thế nào tôi có thể lấy điểm số của người chơi được xác thực?Cách nhận bảng dẫn biểu mẫu có điểm số cao của người chơi được xác thực (Trung tâm trò chơi)

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

Qua rất nhiều tìm kiếm, tôi nghĩ rằng nó đã không phải là một cách để làm điều này .. – ycz

Trả lời

10

Bạn có thể sử dụng đoạn mã sau:

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

Cảm ơn, orkun Ozbek tôi sẽ thử nó sau, hy vọng nó hoạt động! :) – ycz

+0

Giao diện của phương thức ủy nhiệm đó sẽ được gọi là gì? – fauxCoder

+0

Cảm ơn người đàn ông, nó giải quyết vấn đề của tôi. –

5

Bạn cũng có thể cố gắng để bắt đầu Ban lãnh đạo bằng cách sử dụng một loạt các id player (s) nhằm thu hẹp số lượng người chơi:

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

Bạn chỉ cần phải nhấn loadScoresWithCompletionHandler cho một GKLeaderboard nhất định, sau đó tự động board.localPlayerScore sẽ được điền cho bo mạch.

Vì vậy, ví dụ,

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

Cập nhật phiên bản sử dụng 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 
     } 
    }) 
}