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