2012-11-20 2 views
0

나는 내 응용 프로그램에서 점수와 성과를보고하기 위해이 라이브러리를 사용하고 있습니다 :GKAchievement의 잠금이 너무 일찍 해제 되었습니까?

https://github.com/csddavies/DDGameKitHelper 그래서 내 응용 프로그램에서 나는 사용자들이 성과를 완료에 얼마나 가까운 알려 비율을보고한다. 그래서 같은 것을 할 :

[[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)에서이 너무 모호 것을 믿습니다. 내 percentComplete 5 % 수 내 6 % 값 수 있지만 결코 100 % 완료됩니다. 그래서 방법이 위의 방법으로 성취도에 대한 percentComplete가 업데이트 될 때마다 성취도 배너가 표시되어 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 반환되는 경우에만 배너를 표시합니다.

관련 문제