-
Notifications
You must be signed in to change notification settings - Fork 0
Leaderboards
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プロジェクトに追加してください。
- アプリの管理画面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); } }