2011年3月25日金曜日

GameKitで小数を送信する

GameKitでスコアやランキングデータを送信する時、Appleのドキュメントでは整数(int64)のデータを送信する方法しか載っていないので、タイムなどの小数(45.67秒等)を送信したい場合は一瞬戸惑います。

小数を送信する場合、NSNumberクラスを使用します。
NSNumberクラスはBoolやdouble,Int型などのprimitive型をオブジェクトにしたい場合に使用する便利なクラスです。


-(void)reportScores:(double)score forCategory:(NSString*)category
{
scoreReporter = [[[GKScore alloc] initWithCategory:category] autorelease];
NSNumber *numScore = [NSNumber numberWithDouble:round(score * 100)];
scoreReporter.value = numScore.intValue;
[scoreReporter reportScoreWithCompletionHandler:^(NSError* error) {
if (error != nil) {
// エラー処理
return;
}
}];
}


Appleのドキュメントに載っているスコア送信例を、double型を送信するように変更してあります。
上の例では、少数以下2桁を送信する例です。
引数のdouble型scoreを整数にしたいので100倍してNSNumber型のオブジェクトにします。
その後、そのint値(64ビット値)をGKScoreオブジェクトに設定しています。
勿論、iTunesでリーダーボードのスコア設定をDecimal小数2桁等、小数を扱うように設定しておく必要はあります。

後はAppleドキュメントに載っている様にランキング受信処理でGKScoreのformattedValueプロパティを参照すれば、iTunesで設定したフォーマットでNSString文字列が取得できます。

0 件のコメント:

コメントを投稿