Skip to content
yokoe edited this page Sep 14, 2010 · 16 revisions

リーダーボード

  • 連勝回数やクリア回数などの定量データを用いてランキングを行う機能がリーダーボードです。

リーダーボードの登録

  • 最初にPANKIAのウェブ上から新しいリーダーボードを登録します。
  • リーダーボードは「連勝回数」や「クリア回数」など、内容に応じてその分だけ登録します。
  • リーダーボードには下記の要素を設定できます。
要素名 内容
Name リーダーボードの名前。ダッシュボード上などで表示されます。
Sort by ランキングの並び順。latestにすると最新のスコアが、Maxにすると過去最高スコアが集計対象になります。
Min version そのリーダーボードの集計対象となるゲームの最低バージョン
Max version そのリーダーボードの集計対象となるゲームの最大バージョン
  • リーダーボードを登録するとIDが割り振られます。ゲーム側からはこのIDを使ってリーダーボードにスコアをポストしたり、ランキングを取得したりします。

スコアの送信

  • リーダーボードにスコアを送信するには+[PankiaNet postScore:leaderboardId:]を使用します。
- (void)postSomeScore
{
    [PankiaNet postScore:10 leaderboardId:1]; //ID 1のリーダーボードにスコア「10点」を送信します
}
  • リーダーボードへのスコア送信は非常に負荷が大きく時間がかかる処理です。必要以上に送信を行うとレイテンシーが大きくなってしまうため、必要な時にだけ送信するようにしてください。
  • リーダーボードへのスコア送信は順番の整合性確保のため、一件ずつ順番に処理されていきます。そのため、短期間に大量のスコア送信を行うと、リーダーボードに反映されるまで長い時間がかかる場合があります。注意してください。(上記同様、必要な時だけ送信するようにしてください。)

デルタ機能 (現在はまだ非推奨)

- (void)addSomeScore
{
    [PankiaNet postScore:10 leaderboardId:1 delta:YES]; //ID 1のリーダーボードにスコア「10点」を加算します
}
  • デルタ機能を使うと、積み上げ式のスコア(「累計走行距離」等)の実装が簡単になります。
  • 例えば、ID=1のリーダーボードのスコアが20の状態で上記コードを実行すると、ID=1のボードのスコアは30点になります。
  • ローカルで保持している値とサーバー上の最新スコアはずれる可能性があるため、デルタ機能を使う場合は注意してください。

ランキングの取得

  • ランキングはサーバー上に保存されているため、現在のスコアと順位を取得する場合はサーバーに値を取得しにいきます。
  • 任意リーダーボードにおける現在のスコアとランク順位を取得するには、fetchLeaderboardを使用します。
- (void)fetchRankOnLeaderboard26
{
	//ID 26のリーダーボードにおけるスコアと順位を取得しにいきます。
	[PankiaNet fetchRankOnLeaderboard:26];
}
  • あるいは、fetchAllLeaderboardsRankを使用して一度にすべてのリーダーボードのスコアと順位を取得しにいくこともできます。
- (void)fetchAllLeaderboardsRank
{
	[PankiaNet fetchAllLeaderboardsRank];
}
  • 値が取得されると、fetchRankOnLeaderboardDone:が呼ばれます。引数にはリーダーボードにおけるスコア/順位を表す PNRank データが配列になって含まれています。fetchRankOnLeaderboardを使用する場合は、この引数の一つ目のオブジェクトを使用してください。
  • スコアはlong long int型です。NSLogやsnprintf等を使用するときには注意してください。
- (void)fetchRankOnLeaderboardDone:(NSArray *)rankArray
{
	for(PNRank* rank in rankArray){
		NSLog(@"%d における最新スコアは %lld (%d位)" ,rank.leaderboardId, rank.score, rank.rank);
	}
}

最新スコアの取得

  • 最新スコアは+[PankiaNet fetchRankOnLeaderboard:]で取得されるランク情報からも取得可能ですが、+[PankiaNet fetchLatestLeaderboardsScore:]を使うと、より高速に、一度に複数のボードの最新スコアを取得してくることができます。
- (void)fetchLatestScoreOnLeaderboard10
{
    [PankiaNet fetchLatestLeaderboardsScore:[NSArray arrayWithObject:[NSNumber numberWithInt:10]];
}
  • 値が取得されると、fetchScoresOnLeaderboardDone:が呼ばれます。引数にはリーダーボードにおけるスコアを表す PNRank データが配列になって含まれています。
  • スコアはlong long int型です。NSLogやsnprintf等を使用するときには注意してください。
- (void)fetchScoresOnLeaderboardDone:(NSArray*)rankArray
{
	for(PNRank* rank in rankArray){
		NSLog(@"%d における最新スコアは %lld" ,rank.leaderboardId, rank.score);
	}
}
Clone this wiki locally