重置单个游戏中心成就

时间:2014-01-19 17:23:11

标签: ios objective-c game-center

在我的应用程序中,我取得了连胜10胜的成就。因此,当用户连续赢得5场比赛时,我报告完成50%的成就 - 这很好。当用户丢失一些游戏时,我会调用我的resetAchievment方法,该方法将百分比设置为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]);
        }
    }];
}

是否无法再次报告较小的百分比 - 或者我做错了什么?

5 个答案:

答案 0 :(得分:3)

我根本没有GameKit的实际经验,但是从阅读文档和搜索网络看来,你似乎只能报告进度而不是回归(?)更不用说你只能重置所有成就......也许以下内容仍然可以帮助你实现(咳咳)你想要的东西:

  • 使用+ (void)loadAchievementsWithCompletionHandler:
  • 更新所有本地成就数据
  • 将此数据存储在userDefaults中以确保安全
  • 请勿重置本地成就数据
  • 使用+ (void)resetAchievementsWithCompletionHandler:
  • 重置所有成就
  • 将有关成就的percentComplete更改为0。
  • 报告本地存储空间中所有成就的进度

现在,正如我所提到的,由于没有实际操作这个框架的经验,上述内容可能因为我不知道的原因(例如向玩家呈现进展的方式)而不实用。无论如何,猜测分享这个想法值得一试......

答案 1 :(得分:2)

简短回答:无法再次报告较小的百分比。

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

例如,你得分高达10分,并记录在GameCenter中。 如果在下一次尝试中你获得5分并且他们被提交给GC,那么你的10分高分将不会受到影响。

同样,如果你试图“重置”你的分数,那就算是提交0的新分数,所以它不会产生任何影响。

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

答案 2 :(得分:1)

如果你考虑一下,5胜不是50%,因为他们可能输掉第6名,然后连胜10次,在这种情况下他们总共打了16场比赛,5场胜利更像是30%那里的方式。在这种情况下,它是全部或全部,所以在它们全部为10之前不要报告任何内容。

答案 3 :(得分:1)

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

您可以通过将整个NSDictionary与播放器ID作为密钥存储到NSUserDefaults来解决此问题。

答案 4 :(得分:0)

你要做的就是保存NSUserdefaults。然后,调用NSUser默认值并使用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"];
 } 

这只会在成绩十分之后发布,我建议在此之前不要将成就付诸实践,因为这会使成本更加困难。我还建议设置一个AlertView让这个人知道他们在那里。您可以使用checkScoreFive方法使用上面评论的代码执行此操作。记得在.h文件中声明所有内容。

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