2011-11-20 115 views
1
if(myScoreValue.value==300)//achievement for getting 300 points. 
{ 
    GKAchievement *achievement= [[GKAchievement alloc] initWithIdentifier:@"Score4"]; 
    achievement.percentComplete = 100.0; 
    achievement.showsCompletionBanner=YES; 
    if(achievement!= NULL) 
    { 
     [achievement reportAchievementWithCompletionHandler: ^(NSError *error) 
     { 
      if(error != nil){ 
       NSLog(@"Achievement failed"); 
      } else { 
       NSLog(@"Achievement Success"); 
      } 
     }]; 
    } 
} 

當用戶得到剛好300的分數時,他們得到了一個成就,但是如果他們超過300,它就不能工作。我該如何解決?gamecenter沒有得到結果

+0

請把'在每一個句子的結尾.'。 – vikingosegundo

+0

除了可能的問題? –

+0

更多細節可能會有所幫助;你什麼時候運行這段代碼?也許它運行頻繁? –

回答

1

當用戶獲得的分數恰好爲300時,他們會得到一個成就,但如果他們超過300則無法工作。我該如何解決?

問題是您正在檢查分數是否恰好爲300;如果分數是(例如)302,則您顯示的代碼不會執行。您應該檢查如果分數高於或等於300

GameCenterManager.m,在蘋果的開發者中心提供一個例子,你可以閱讀下面的註釋(這是在開始的-submitAchievement:percentComplete:):

GameCenter會在提交成就時檢查重複成就,但如果您只想向用戶報告新成就,則需要在提交之前檢查是否已獲得成就。否則,您將以loadAchievementsWithCompletionHandlerreportAchievementWithCompletionHandler之間的競爭狀態結束。爲了避免這種情況,我們一次性獲取當前成就列表,然後緩存並隨時更新任何新成就。

這意味着最終您可以報告已經從用戶獲得的成就;如果您使用的是loadAchievementsWithCompletionHandlerreportAchievementWithCompletionHandler,則需要小心。
對於您的代碼,這意味着您可以使用if (myScoreValue.value >= 300) { /*…*/ }