2011-11-20 26 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

で記載されているGitHub-から非常に便利なソースは、すべての文の末尾に '.'を入れてくださいです。 – vikingosegundo

+0

おそらく質問以外は? –

+0

さらに詳しい情報が役に立ちます。いつこのコードを実行していますか?おそらくそれは頻繁に実行されていますか? –

答えて

1

ユーザーが正確に300点のスコアを取得した場合、達成度は得られますが、300点を超えると機能しません。どのように修正すればよいですか?

問題は、スコアが正確に300であるかどうかを確認することです。スコアが(たとえば)302の場合、表示するコードは実行されません。

:スコアは GameCenterManager.mで300

、Appleの開発センターで利用可能な例に以上であるかどうかをチェックする必要があり、あなたは(それが-submitAchievement:percentComplete:の始まりである)次のコメントを読むことができます

GameCenterはアチーブメントが提出されたときに重複したアチーブメントをチェックしますが、新しいアチーブメントのみをユーザーに報告したい場合は、提出する前に獲得したことを確認する必要があります。さもなければ、あなたはloadAchievementsWithCompletionHandlerreportAchievementWithCompletionHandlerの間の競争条件で終わるでしょう。これを避けるため、現在の達成リストを一度取り出してキャッシュし、新しい成果を更新します。

これは、最終的にユーザーからすでに達成されている成果を報告できることを意味します。 loadAchievementsWithCompletionHandlerreportAchievementWithCompletionHandlerを使用している場合は注意が必要です。
コードでは、if (myScoreValue.value >= 300) { /*…*/ }を使用できることを意味します。

関連する問題