1

リーダー ボードを iOS ゲームに統合しようとしています。

GKScore クラスにはカテゴリが必要ですが、リーダー ボードは 1 つしかありません。フィールドカテゴリがどこにもありません。ローカライズ中のリーダー ボード ID、リーダー ボード参照名、リーダー ボード名があります。もしあれば、どれを使用しますか?

2 つのアカウントでスコアを送信していますが、リーダー ボードにスコアが表示されません。エミュレーターを使用しています。

4

1 に答える 1

3

まず、エミュレータを使用しないでください。Game Center へのスコアの送信などの多くの機能がシミュレーターでは機能しないため、可能であればデバイスを使用してください。試行されたスコア レポートによって返されたエラーをログに記録しようとしましたか? これにより、将来の困難について詳しく知ることができます。あなたの質問に答えるには、リーダー ボード ID をカテゴリとして使用します。カテゴリのスコアを送信するために使用できるサンプル関数を次に示します。

ヘッダー ファイルで isGameCenterAvailable bool を定義し、次のコードを使用してその値を設定します。

Class gameKitLocalPlayerClass = NSClassFromString(@"GKLocalPlayer");        
bool isLocalPlayerAvailable = (gameKitLocalPlayerClass != nil);     

// Test if device is running iOS 4.1 or higher
NSString* reqSysVer = @"4.1";
NSString* currSysVer = [[UIDevice currentDevice] systemVersion];
bool isOSVer41 = ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending);

isGameCenterAvailable = (isLocalPlayerAvailable && isOSVer41);
NSLog(@"GameCenter available = %@", isGameCenterAvailable ? @"YES" : @"NO");

この方法を使用してスコアを送信します。

-(void) submitScores:(int64_t)score category:(NSString*)category {

    if (!isGameCenterAvailable){
        return;
    }

    GKScore* gkScore = [[[GKScore alloc] initWithCategory:category] autorelease];
    gkScore.value = score;

    [gkScore reportScoreWithCompletionHandler:^(NSError* error) {
        bool success = (error == nil);
        if(!success){
            NSLog(@"Error Reporting High Score: %@", [[error userInfo] description]);
        }
        [delegate onScoresSubmitted:success];
    }];
}

このコードは、cocos2d ゲーム開発に関する素晴らしい本を書いた Steffen Itterheim によって書かれました。これと彼による他の多くの製品へのリンクがあります: http://www.learn-cocos2d.com/

于 2012-04-29T02:16:23.010 に答える