【问题标题】:GKAchievement Unlocked Too Early?GKA成就解锁太早?
【发布时间】:2012-11-20 01:02:34
【问题描述】:

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

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

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

但似乎报告说我完成了成就“Achievement1”,尽管我没有。当我 NSLog totalTime/300.0f 时,我得到一个类似 0.563NOT 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

【问题讨论】:

  • 尝试添加 NSLog 以查看“百分比”值。并更新一个问题
  • 好的,我添加了它,因此您可以看到出于某种奇怪的原因,某些百分比始终为 0.00000。现在也有 3 0.000000 个数字,这是有道理的,因为每次我报告它们时都会显示相同的 3 个成就。

标签: ios game-center percentage achievements


【解决方案1】:

我认为这里的问题是在支票if (achievement.percentComplete &lt; 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 时才会显示横幅。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 2015-11-29
    • 2023-04-01
    相关资源
    最近更新 更多