2012-03-12 3 views
0

私はGameKitのリーダーボードが1回のプレイのスコアだけではなく、複数のプレイ全体にわたって私の合計累積スコアを表示したいと思っています。これを行う方法はありますか?GameKitでハイスコアのランキングを実行することはできますか?

他の言葉で言えば、1人のプレイヤーは、リーダーボード内で自分の名前に複数のエントリを持つことはありません。経験豊富な経験豊富な生涯のヘッドショットを考えてみてください。あなたは4つのヘッドショットを持っていたとき、そして20のヘッドショットを持っていたときにそのリーダーボードにエントリーを持っていません。あなたは20の生涯のヘッドショットのための1つのエントリーを持っています。

答えて

1

あなたはこれを行うことができますが、それを自分で管理する必要があります。 GameKitは、累積スコアではなく、単一ゲームの高得点を中心としています。 GKLeaderboardは指定した時間範囲内で最高のスコアしか返さないため、プレーヤーはリーダーボードに複数回表示されないことに注意してください。

累積スコアを追跡することはそれほど難しくありません。これを行うために使用しているコードは次のとおりです。スコアを追跡しているIDを持つGKLeaderboardを取得し、ローカルユーザーのハイスコアを取得します。次に、現在のハイスコアに新しい合計を追加し、新しい合計を報告します。

- (void)updateLeaderboardWithID:(NSString *)identifier score:(int64_t)score { 
    GKLeaderboard* leaderBoard= [[GKLeaderboard alloc] init]; 
    leaderBoard.category = identifier; 
    leaderBoard.timeScope = GKLeaderboardTimeScopeAllTime; 
    leaderBoard.range = NSMakeRange(1, 1); 

    [leaderBoard loadScoresWithCompletionHandler: ^(NSArray *scores, NSError *error) { 
      dispatch_async(dispatch_get_main_queue(), ^(void) { 
       GKScore *localScore = leaderBoard.localPlayerScore; 
       int64_t newValue = localScore.value + score; 
       localScore = [[GKScore alloc] initWithCategory:identifier]; 
       localScore.value = newValue; 
       [localScore reportScoreWithCompletionHandler:^(NSError *error){ 
        // error handling goes here 
       }]; 
      ); 
    }]; 
} 
+0

ありがとうございました。私は別のルートに行くのをやめましたが、あなたが見せているコードは仕事をするように見えます。 – blachniet

関連する問題