0

このライブラリを使用して、アプリでスコアと成果を報告しています: https://github.com/csddaies/DDGameKitHelper

そのため、私のアプリではパーセンテージを報告して、達成にどれだけ近づいているかをユーザーに知らせています。だから私はこのようなことをします:

[[DDGameKitHelper sharedGameKitHelper] reportAchievement:@"Achievement1" percentComplete:totalTime/300.0f];

しかし、アチーブメント「Achievement1」を完了していないのに、完了したと報告されているようです。NSLogを実行すると、 0.563totalTime/300.0fのような値が得られ、100ではありません

だから今、私はメソッドに何か問題があるに違いないと考えているreportAchievementので、それを見て、何が間違っているのかわかりません。に関連するメソッドは次のreportAchievementとおりです。

-(void) reportAchievement:(NSString*)identifier percentComplete:(float)percent
{
    if (isGameCenterAvailable == NO)
        return;

    GKAchievement* achievement = [self getAchievement:identifier];
    if (achievement.percentComplete < percent)
    {
        NSLog(@"new achievement %@ reported", achievement.identifier);
        achievement.percentComplete = percent;
        [achievement reportAchievementWithCompletionHandler:^(NSError* error)
         {
             [delegate onReportAchievement:(GKAchievement*)achievement];
         }];

        [self saveAchievements];
    }
}

-(GKAchievement*) getAchievement:(NSString*)identifier
{
    GKAchievement* achievement = [achievements objectForKey:identifier];

    if (achievement == nil)
    {
        achievement = [[[GKAchievement alloc] initWithIdentifier:identifier] autorelease];
        [achievements setObject:achievement forKey:achievement.identifier];
    }

    return achievement;
}

実際には完了していないにもかかわらず、私の成果が早期に完了したと報告される原因となるものはここにありますか?

ありがとう!

編集1:

2012-11-19 20:50:15.946 App[16894:907] percent: 0.005556
2012-11-19 20:50:15.947 App[16894:907] achievement percentComplete: 0.004861
2012-11-19 20:50:15.972 App[16894:907] percent: 0.000000
2012-11-19 20:50:15.973 App[16894:907] achievement percentComplete: 0.000000
2012-11-19 20:50:15.974 App[16894:907] percent: 0.026000
2012-11-19 20:50:15.974 App[16894:907] achievement percentComplete: 0.024000
2012-11-19 20:50:16.003 App[16894:907] percent: 0.002600
2012-11-19 20:50:16.004 App[16894:907] achievement percentComplete: 0.002400
2012-11-19 20:50:16.010 App[16894:907] percent: 0.000000
2012-11-19 20:50:16.011 App[16894:907] achievement percentComplete: 0.000000
2012-11-19 20:50:16.012 App[16894:907] percent: 0.016667
2012-11-19 20:50:16.012 App[16894:907] achievement percentComplete: 0.016667
2012-11-19 20:50:16.013 App[16894:907] percent: 0.000000
2012-11-19 20:50:16.014 App[16894:907] achievement percentComplete: 0.000000
4

1 に答える 1

0

ここでの問題は、小切手if (achievement.percentComplete < percent)では曖昧すぎるということだと思います。percentComplete は 5% で、パーセント値は 6% である可能性がありますが、決して 100% 完了したわけではありません。したがって、上記の方法では、実績のパーセント完了が更新されるたびに実績バナーが表示されるだけであり、これは Game Center が機能する方法ではありません。また、実績のロックを解除したかのようにバナーが表示されていても、Game Center アプリでチェックインしたときに実際には表示されないことに気付きました。したがって、次の方法は私が代わりに行ったことです。

-(void) reportAchievement:(NSString*)identifier percentComplete:(float)percent
{
    if (isGameCenterAvailable == NO)
        return;

    GKAchievement* achievement = [self getAchievement:identifier];
    if (percent > achievement.percentComplete)
    {
        NSLog(@"new achievement %@ reported", achievement.identifier);
        achievement.percentComplete = percent;
        [achievement reportAchievementWithCompletionHandler:^(NSError* error) {
             if (achievement.isCompleted) {
                [delegate onReportAchievement:(GKAchievement*)achievement];
             }
         }];

        [self saveAchievements];
    }
}

このコードでは、更新された値が 100% に向かって報告されますが、GC からの isComplete BOOL が YES と返された場合にのみバナーが表示されます。

于 2012-11-20T03:20:46.030 に答える