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则无效。我该如何解决?
答案 0 :(得分:1)
当用户获得正好300分时,他们会获得成就,但如果他们超过300则无效。我该如何解决?
问题是你正在检查分数是否正好是300;如果得分是(例如)302,则表示您显示的代码不会被执行。您应该检查分数是否高于或等于300。
在GameCenterManager.m,Apple开发人员中心提供的示例中,您可以阅读以下注释(位于-submitAchievement:percentComplete:
的开头):
GameCenter会在提交成就时检查重复的成就,但如果您只想向用户报告新成就,则需要在提交之前检查是否已获得成就。否则,您最终会遇到
loadAchievementsWithCompletionHandler
和reportAchievementWithCompletionHandler
之间的竞争条件。为了避免这种情况,我们一次获取当前成就列表,然后缓存它并使用任何新成就更新它。
这意味着最终您可以报告已经从用户获得的成就;如果您使用loadAchievementsWithCompletionHandler
和reportAchievementWithCompletionHandler
,则需要小心
对于您的代码,这意味着您可以使用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
的非常有用的资源