2014-01-19 48 views
2

在我的應用程序中,我連續獲得了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]); 
     } 
    }]; 
} 

是不可能再次報告一個較小的百分比 - 或者我做錯了什麼?

回答

2

簡答:不可能再次報告較小的百分比。

長答案:較低的GameCenter分數不會覆蓋較高的分數。

例如,你有10分的高分,它記錄在GameCenter中。 如果在下次嘗試中獲得5分並將其提交給GC,則10分的高分不會受到影響。

同樣,如果您嘗試「重置」您的分數,它會計爲提交0分的新分數,所以它不會有所作爲。

這僅適用於提交的GameCenter,你的應用程序中,你可以做任何你想要的成績和成就(例如自定義的排行榜什麼的)

3

我根本沒有從GameKit的實際經驗,但從閱讀文檔和搜索網絡似乎你只能夠報告進展而不是迴歸(?)更不用說只能重置的事實所有的成就......也許下面仍然會幫助你實現(啊哈)你想要什麼:

  • 更新所有本地的成就與+ (void)loadAchievementsWithCompletionHandler:
  • 存儲這些數據在userDefaults安全
  • 難道不是數據重置本地成績數據
  • 重置所有成就+ (void)resetAchievementsWithCompletionHandler:
  • 將有關成就的percentComplete更改爲0。
  • 從本地存儲的所有成就的報告進展情況現在

,正如我提到,在使用以上這個框架沒有實際操作經驗可能並不適用於一些原因,我不知道的是實用(例如向玩家呈現進展的方式)。猜猜這是值得一炮分享的想法反正...

+0

聽起來像測試值得的想法! –

+0

將它保存到userDefaults聽起來像個好主意。出於某種奇怪的原因,我認爲我唯一的機會來存儲進度將是我報告的百分比。儘管我已經在userDefaults和CoreData中存儲了其他內容。 –

1

如果你想想看,5勝並不是50%的方式,因爲他們可能會輸掉第6名,然後贏得10連勝,在在這種情況下,他們總共打了16場比賽,5場比賽更像是30%的比賽。在這種情況下,它是全部或沒有,所以不要報告任何東西,直到它們全部爲10.

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; 
1

請注意,存儲對在NSUserDefaults的成就進度不考慮不同的GameCenter用戶。這意味着,如果玩家A(登錄GameCenter)取得了一些進展,並且在同一臺設備上的另一個玩家B以他自己的賬戶登錄到GameCenter中時,進度有90%進展,他從玩家A取得的進展開始。

您可能通過將整個NSDictionary與播放器ID作爲關鍵字存儲到NSUserDefaults中來解決此問題。