Skip to content
yokoe edited this page Nov 2, 2010 · 16 revisions

リーダーボード

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

リーダーボードの登録

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

定義ファイルの作成

リーダーボードの使用には定義ファイルが必要です。管理画面から定義ファイルをエクスポートし、Xcodeプロジェクトに追加してください。

Version 2の場合

  • アプリの管理画面SettingsのApp Settingsを開きます。
  • ページ下部にある「export (for v2)」を右クリックし、対象をファイルに保存します。
  • ダウンロードしたファイルをPNOfflineSettings.plistにリネームし、プロジェクトに追加します。

スコアの送信

  • リーダーボードにスコアを送信するには+[PankiaNet postScore:leaderboardId:delta:]を使用します。
- (void)postSomeScore
{
    int64_t result = [PankiaNet postScore:10 leaderboardId:1 delta:NO]; //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];
}
  • 値が取得されると、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);
	}
}