GameCenter(GameKit)を使う準備
iTunesConnect側で新規アプリを登録します。実際のアプリデータはまだ送信しなくてOKです。iTunesConnectでGameCenterの設定をしないと、テストも出来ないのです。Xcodeの方だけで設定をしていても「this game is not recognized by game center」とエラーが出るだけです。
アプリを登録したら、アプリの設定画面から「Manage Game Center」をクリック。
「Edit」で中に入ったら、左上の「Add Leaderboard」をクリックして新しくLeaderboardを作ります。Choose Leaderboard Typeでは「Single Leaderboard」をクリック。
Leaderboardの各項目について
- Leaderboard Reference Name・・・リーダーボードの名前:任意
- Leaderboard ID・・・リーダーボードのID:任意 (Xcodeでの実装にも必要なので忘れずに…)
- Score Format Type・・・スコアの送り値 整数 / 固定小数点数 / タイム / 金額 より選択
- Ascending・・・並び順を昇順か降順を選択
- Score Range・・・とりあえず0から、マックスまで指定
Leaderboard Localizationでは各国毎に表記を変更できます。例えば単位に「点」、「秒」をつけることができます。
Xcodeでの実装
GameKitのフレームワークを追加。
Cocos2dだと、最初からフレームワーク入ってた…。
次にResorces > info.plistの中のRequrired device capabilities内に+ボタンを押して
アプリ起動時にGameCenterへのログイン認証を行いたいので、AppDelegate.m内に追記。
#import <GameKit/GameKit.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//gamecenterのプレイヤーを取得
[[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:^(NSError *error){}];
ログインしていれば、ログインしました。と上部ににょろっと表示される。SANBOXというモードはテスト専用のモード。(テストの高得点が、実際のGameCenterに反映されないようになっています。テストユーザーを作る時は、特に注意が必要。ここで使ったメアドは、本番のApple IDに利用できなくなるなどのトラブルが続き、アップル内でも部署をまたぎかなり面倒なことに…)
次にGameCenter呼び出す。
実装ファイルの.h .mの両方に#import <GameKit/GameKit.h>を追加
以下は自分の備忘録的にCocos2dでの実装…。
実装ファイルの.h .mの両方に#import <GameKit/GameKit.h>を追加
以下は自分の備忘録的にCocos2dでの実装…。
1)デリゲートをちゃんと記述する
XXXScene.h
@interface XXXScene : CCLayer<GKLeaderboardViewControllerDelegate>{
XXXScene.h
@interface XXXScene : CCLayer<GKLeaderboardViewControllerDelegate>{
XXXScene.m
//リーダーボードを立ち上げる
//リーダーボードを立ち上げる
- (void)GoToRankng {
GKLeaderboardViewController *leaderboardController =
[[GKLeaderboardViewController alloc] init];
if (leaderboardController != nil)
{
leaderboardController.leaderboardDelegate = self;
[[CCDirector sharedDirector]
presentModalViewController:leaderboardController animated:YES];
}
}
//リーダーボードで完了を押した時に呼ばれる
- (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController
{
[[CCDirector sharedDirector] dismissModalViewControllerAnimated:YES];
}
これでビルドしてランキングボタンを押すとリーダーボードが呼び出される(感動)
続いて仕上げにスコアを送る設定
ゲームオーバー処理の箇所に下記を追加。スコア値と、先程メモしておいたリーダーボードIDを設定。
// Game Center スコア送信
GKScore *scoreReporter = [[GKScore alloc] initWithCategory:@"●●●リーダーボードID●●●"];
NSInteger scoreR;
scoreR=●●●スコア値●●●;
scoreReporter.value = scoreR;
[scoreReporter reportScoreWithCompletionHandler:^(NSError *error) {
if (error != nil)
{
CCLog(@"error %@",error);
}
}];
リーダーボードが呼び出されればスコア送信はすんなり行き完了。
GameCenterはいろんな設定ができますが、頭の悪い私はスコアのランキングだけできればとりあえず満足。
コメント