在我的应用程序中,我取得了连胜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]);
}
}];
}
是否无法再次报告较小的百分比 - 或者我做错了什么?
答案 0 :(得分:3)
我根本没有GameKit的实际经验,但是从阅读文档和搜索网络看来,你似乎只能报告进度而不是回归(?)更不用说你只能重置所有成就......也许以下内容仍然可以帮助你实现(咳咳)你想要的东西:
+ (void)loadAchievementsWithCompletionHandler:
+ (void)resetAchievementsWithCompletionHandler:
现在,正如我所提到的,由于没有实际操作这个框架的经验,上述内容可能因为我不知道的原因(例如向玩家呈现进展的方式)而不实用。无论如何,猜测分享这个想法值得一试......
答案 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;