0

我正在使用这个库来报告我的应用程序中的分数和成就:https ://github.com/csdavies/DDGameKitHelper

因此,在我的应用程序中,我报告百分比以让用户知道他们距离完成成就有多近。所以我做这样的事情:

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

然而,似乎报告说我完成了成就“Achievement1”,尽管我没有。当我 NSLogtotalTime/300.0f我得到一个像0.563不是 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)它太模糊了。我的百分比完成可能是 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 回答