游戏中心没有得到结果

时间:2011-11-20 02:37:44

标签: iphone objective-c cocoa-touch game-center

 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则无效。我该如何解决?

2 个答案:

答案 0 :(得分:1)

  

当用户获得正好300分时,他们会获得成就,但如果他们超过300则无效。我该如何解决?

问题是你正在检查分数是否正好是300;如果得分是(例如)302,则表示您显示的代码不会被执行。您应该检查分数是否高于或等于300。

GameCenterManager.m,Apple开发人员中心提供的示例中,您可以阅读以下注释(位于-submitAchievement:percentComplete:的开头):

  

GameCenter会在提交成就时检查重复的成就,但如果您只想向用户报告新成就,则需要在提交之前检查是否已获得成就。否则,您最终会遇到loadAchievementsWithCompletionHandlerreportAchievementWithCompletionHandler之间的竞争条件。为了避免这种情况,我们一次获取当前成就列表,然后缓存它并使用任何新成就更新它。

这意味着最终您可以报告已经从用户获得的成就;如果您使用loadAchievementsWithCompletionHandlerreportAchievementWithCompletionHandler,则需要小心 对于您的代码,这意味着您可以使用if (myScoreValue.value >= 300) { /*…*/ }

答案 1 :(得分:0)

这是我的建议。

阅读Apple官方纪录片作为课程参考http://developer.apple.com/library/ios/#documentation/GameKit/Reference/GKAchievement_Ref/Reference/Reference.html

   OR

这是来自GitHub列出的TypeOneError http://www.typeoneerror.com/articles/post/game-center-achievement-notification

的非常有用的资源