2012-11-21

iPhoneアプリ[Game Center Leaderboards]小数(float型)の送信方法

掛算Questの次のアップデートで、Game Centerを使ったランキング表示機能を組み込みます。

Leaderboardsを使うのですが、小数(float型)のスコアを送信した時に、数字の桁がずれたり完全におかしな数字に変換されたりでちょっと苦労したので、書き留めておきます。

なぜか日本語の情報が無かって苦労したのですが、英語のサイトを調べて何とか解決することができました。

Leaderboardsに送信するには、int64_t型というものを使わなければならないようで、それに変換してから送信する必要があります。

そもそも私は、int64_t型なんて言葉を初めて聞きました。

具体的な変換コードはこんな感じになります。

GKScore *scoreReporter = [[GKScore alloc] initWithCategory:@"[Leaderboard ID]"];
    int64_t myScore = (int64_t)(totalPoint * 100.0f);
    scoreReporter.value = myScore;
    [scoreReporter reportScoreWithCompletionHandler:^(NSError *error) {
        if (error != nil) {
            // エラーの処理
            NSLog(@"error %@", error);
        }
    }];

当然、変数とLeaderboard IDは読み替えて欲しいのですが、このコードで言うとtotalPointという変数がfloat型で計算したスコアを入れてあります。

float型の場合は、100倍してから変換する必要があるようです。

int64_t型っていうのを知った事と、初めてGame Centerの機能を実装したことで、少し成長しました。

2012-11-05

Xcode4.5.1(iOS6)でAdMobを実装するときのエラー対処法

iPhoneにAdMobを組み込む時に、この公式ページを見てやるとエラーが出る。

公式サイトには全く書いていない事をいくつか追加してやらないと解決することができません。ほんとに不親切極まりない。もうちょっと更新して欲しいと思う。

これをやれば解決できたというのをとりあえず、書いておきたいと思います。いろいろ関係ないこともやってしまったこともあって、必要ない事も含まれているかもしれませんが参考にして頂ければうれしいです。

まず、追加するフレームワークとして挙げられているのが、この4つ。

  • AudioToolbox
  • MessageUI
  • SystemConfiguration
  • CoreGraphics

この時点で既に足りていません。以下の2つを追加しました。

  • StoreKit.framework
  • AdSupport.framework

そして、Other Linker Flagsに「-ObjC」を追加しなければなりません。これを追加しておかないと公式サイトのサンプルコードに書いてある最後の広告を読み込む行のところでアプリがクラッシュします。

[bannerView_ loadRequest:[GADRequest request]];

「-ObjC」の追加は、PROJECT→TARGETS→Build Settingsタブ→ All→Linking→Othe Linker Flags の部分です。

あとBuild Settingsのarmv7sを削除しました。

これで僕の場合は、無事にAdMobが表示されました。

自分なりに調べて何とか解決できた事なので、何をしているのかなどは理解できていませんので、間違えている部分があるかもしれません。

もし、お気づきの点があればコメント下さい。

2012-11-04

iPhoneアプリ制作で初心者がつまずきやすい画面の切り替えを分かりやすく解説

iPhoneアプリを作り始めた頃、最も分かりにくかったのが、画面の切り替え方法です。

分かってしまえばすごく簡単なのですが、多くの解説本には掲載されていません。

画面の切り替えなんて最もよく使う機能の1つなんだし、そのやり方を実現できる一番基礎的で簡単な方法は絶対に初心者本には掲載しなければいけないと個人的には思います。

もし、同じような事で悩んでいる人がいれば、この記事を参考にして欲しいと思います。

まず、画面の切り替えは3行くらいでできます。サンプルコードはこれ。


aboutUsViewController * aboutUsViewController = [[aboutUsViewController alloc] init];
aboutUsViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentViewController:aboutUsViewController animated:YES completion:nil];

たったこれだけなんですよね。

これだけとりあえず書いといてくれればいいのに、複雑な画面遷移のサンプルコードしか載せてない本がほとんど。まずは、シンプルな最低限の基本的な事だけを教えるっていうのは教育の基本中の基本なんですけどね。

1行目で移動先のクラスのインスタンスを生成して、2行目で画面が切り替わる時のアニメーションを設定して、3行目で移動させる。

これだけです。

この3行をRoundRectボタンなんかのタップ時のアクションメソッドに記述すればいいだけ。

ボタンをタップすれば、下の画像の赤く囲ってあるトップページから青く囲ってある会社情報が書いてあるビューに切り替わります。(aboutUsViewControllerというのはクラス名ですので各自遷移先の名前に変更)

ボタンの設置とアクションの設定はインターフェースビルダーで簡単にできますが、インターフェースビルダーを使わない場合のサンプルコードを掲載しておきます。


// タップすると会社情報ページに移動するボタン
UIImage *aboutUsImage = [UIImage imageNamed:@"aboutUs.png"];
UIButton *aboutUsBtn = [UIButton buttonWithType:UIButtonTypeCustom];
aboutUsBtn.frame = CGRectMake(118, 437, 190, 35);
[aboutUsBtn setImage:aboutUsImage forState:UIControlStateNormal];
[aboutUsBtn addTarget:self
                 action:@selector(tapAboutUs:)
       forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:aboutUsBtn];
    
(省略)
    
- (IBAction)tapAboutUs:(id)sender {
    aboutUsViewController *viewController = [[aboutUsViewController alloc] init];
    viewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentViewController:viewController animated:YES completion:nil];
}

画面遷移さえできれば、僕みたいなちょっとプログラミングをかじっている程度の人間でも、ちょっとしたアプリなら簡単に作れるようになります。