2012-11-20 74 views
0

我使用這個庫在我的應用程序報告的成績和成就:https://github.com/csddavies/DDGameKitHelperGKAchievement解鎖得太早?

所以在我的應用我彙報百分比,以讓用戶知道他們是在完成一個成就多麼接近。所以,我做這樣的事情:

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

但是它似乎是報告說我完成了成果,「Achievement1」,即使我沒有。當我NSLog totalTime/300.0f我得到一個值,如0.563不是

所以現在我想到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; 
} 

所以有什麼在這裏,可能會導致我的成績報告爲,即使他們真的不早完成?

謝謝!

EDIT1:

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 
+0

嘗試添加NSLog查看「百分比」值。並更新一個問題 – CReaTuS

+0

好的,我添加了它,所以你可以看到一些奇怪的原因,一些百分比總是0.00000。現在也有3個0.000000的數字,這是有道理的,因爲每次我報告它們時,同樣的3個成就不斷出現。 –

回答

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。