Ios 重置单个gamecenter成就

Ios 重置单个gamecenter成就,ios,objective-c,game-center,Ios,Objective C,Game Center,在我的应用程序中,我取得了10连胜的成就。因此,当用户连续赢得5场比赛时,我会报告完成50%的成绩-这很好。当用户输掉一些游戏时,我调用我的重置实现方法,该方法将百分比设置为0,并再次报告百分比。然而,当我重新启动应用程序时,从GKAchivement读取的百分比仍然显示为50% - ( void ) resetAchievement { _gamekitAchievement.percentComplete=0.0f; _counter = 0; [self repor

在我的应用程序中,我取得了10连胜的成就。因此,当用户连续赢得5场比赛时,我会报告完成50%的成绩-这很好。当用户输掉一些游戏时,我调用我的重置实现方法,该方法将百分比设置为0,并再次报告百分比。然而,当我重新启动应用程序时,从GKAchivement读取的百分比仍然显示为50%

- ( void ) resetAchievement
{
    _gamekitAchievement.percentComplete=0.0f;
    _counter = 0;
    [self report];
}

- ( void ) report
{
    _gamekitAchievement.showsCompletionBanner = YES;
    [_gamekitAchievement reportAchievementWithCompletionHandler:^(NSError *error)
    {
        if (error)
        {
            NSLog(@"reporting Achievment: %@ failed, error: %@", _gamekitAchievement.identifier, [error localizedDescription]);
        }
    }];
}

难道不可能再报告一个较小的百分比吗?或者我做错了什么吗?

我对GameKit没有任何实际经验,但通过阅读文档和搜索web,你似乎只能报告进度而不能报告回归(?)更不用说你只能重置所有成就。。。也许以下几点仍然可以帮助你实现你想要的:

  • 使用
    +(void)loadAchievementsWithCompletionHandler:
  • 为了安全起见,将此数据存储在userDefaults中
  • 不要重置本地成就数据
  • 使用
    +(void)resetAchievementsWithCompletionHandler:
  • 将有关成就的完成百分比更改为0
  • 报告本地存储中所有成就的进度

现在,正如我所提到的,由于我不知道的一些原因(例如,向玩家展示进度的方式),没有使用该框架的实际经验,上述方法可能不实用。想一想,5场胜利并不是成功的50%,因为他们可能输掉第6场,然后连续赢10场,在这种情况下,他们总共打了16场比赛,5场胜利更像是成功的30%。在这种情况下,要么全部报告,要么什么都不报告,所以在他们拥有全部10个之前不要报告任何内容。

您要做的是将其保存为默认值。然后,调用NSUser default并使用IF语句检查它是什么数字

-(void)checkAcheivement{
scoreNumber = [NSUserDefaults standardUserDefaults] objectForKey:@"GamesWon"]
if(scoreNumber == 10){
//Run code to save achievement in Game Center(_gamekit stuff)

}

//-(void)checkScoreFire{
//scoreNumber = [NSUserDefaults standardUserDefaults] objectForKey:@"GamesWon"]
//if(scoreNumber == 5){
//Run code to set up alert view for 5 wins below
 //UIAlertView* message = [[UIAlertView alloc]
 //                       initWithTitle: @"Alert"
 //                       message: @"You are halfway to the Achievement!"
 //                      delegate: self
 //                     cancelButtonTitle: @"Dismiss"
 // [message show];


//}




//to save score use this method:

-(void)saveScore{
scoreNumber = [NSUserDefaults standardUserDefaults] objectForKey:@"GamesWon"]
if(gameScore > scoreNumber){
[[NSUserDefaults standardUserDefaults]setInteger:scoreNumber forKey:@"GamesWon"];
 } 
如果成绩是10,我建议在那之前不要把成绩放进去,因为这会让它更难。我还建议设置一个AlertView,让用户知道他们已经完成了一半。您可以使用上面使用checkScoreFive方法注释的代码来执行此操作。记住也要声明.h文件中的所有内容

 IBOutlet UIAlertView *AlertView;
 -(void)checkAcheivement;
 -(void)checkScoreFire;
 -(void)saveScore;
 int gameScore;
 int scoreNumber;

简短回答:不可能再报告一个较小的百分比

答案很长:较低的GameCenter分数不会覆盖较高的分数

例如,您的高分为10分,并记录在GameCenter中。 如果在下一次尝试中,你得到5分,并将其提交给GC,你的高分10分不会受到影响

同样,如果你试图“重置”你的分数,它将被视为提交一个0的新分数,因此不会产生任何影响


这仅适用于提交给GameCenter的分数和成就,在应用程序中,您可以做任何您想做的事情(例如您自己的自定义排行榜或其他)

请注意,在NSUserDefaults中存储成就进度不会考虑不同的GameCenter用户。这意味着,如果玩家A(登录到GameCenter)取得了一些进展,并且在90%的进展率下,同一设备上的另一个玩家B使用自己的帐户登录到GameCenter,他将从玩家A取得的进展开始


您可以通过将一个完整的NSDictionary(玩家ID作为键)存储到NSUserDefaults中来解决这个问题。

听起来像是一个值得测试的想法!将其保存到userDefaults听起来是个好主意。出于某种奇怪的原因,我认为我唯一存储进度的机会就是我报告的百分比。尽管我已经在userDefaults和CoreData中存储了其他内容。