2011-06-28 32 views
0

我的遊戲中心成就出現在Game Center中,所以我知道我的實施在報告中是正確的。GameKit成就問題

幾個關於這個問題的問題。

首先,在Game Center中,它沒有顯示圖像上的百分比視圖...即在成就旁邊完成了2%,儘管我已經報告了0.02。我知道這個成就是有報道的,因爲如果我把它放在100上,它就會記錄下這個成就。

其次,我的成就並沒有在獎賞時顯現給用戶。據我瞭解,這個功能假設是由gamekit自動處理的。我的印象是小模態會讓用戶知道他們完成了一個成就。我現在認爲我必須做的事情,因爲沒有小模式出現。

我會附上我的代碼,但大部分都是現貨。

我最後的問題是檢索分數。我相信我將不得不存儲我自己的分數,因爲我目前的實現看起來並不會很好。

在此先感謝...

- (void) loadAchievements 
{ [GKAchievement loadAchievementsWithCompletionHandler:^(NSArray *achievements,  NSError *error) { 
if (error != nil) 
{ 
    // handle errors 
} 
if (achievements != nil) 
{ 
    // process the array of achievements. 
} 
}]; 
} 

-(float)getAchievementPercentageForIdentifier:(NSString *)identifier { 

__block float percentage = 0; 

[GKAchievement loadAchievementsWithCompletionHandler:^(NSArray *achievements, NSError *error) { 
    if (error != nil) 
    { 
     // handle errors 
    } 
    if (achievements != nil) 
    { 
     // process the array of achievements. 

     for (GKAchievement *achievement in achievements) { 

      if ([achievement.identifier isEqualToString:identifier]) { 

       percentage = achievement.percentComplete; 
       NSLog(@"percent complete --> %f", achievement.percentComplete); 

      } 

     } 

    } 
}]; 

NSLog(@"Percentage --> %f", percentage); 

return percentage; 

} 

- (void) reportAchievementIdentifier: (NSString*) identifier percentComplete: (float) percent 
{ 
GKAchievement *achievement = [[[GKAchievement alloc] initWithIdentifier: identifier] autorelease]; 
if (achievement) 
{ 
    achievement.percentComplete = percent; 
    [achievement reportAchievementWithCompletionHandler:^(NSError *error) 
    { 
     if (error != nil) 
     { 
      // Retain the achievement object and try again later (not shown). 
     } 
    }]; 
} 
} 

-(void) addCompletedGameToAchievements { 

float oneGamePercentage = 0; 
float tenGamePercentage = 0; 
float fiftyGamePercentage = 0; 
float hundredGamePercentage = 0; 
float fivehundredGamePercentage = 0; 
float thousandGamePercentage = 0; 

int gamesComplete = 0; 

oneGamePercentage = [self getAchievementPercentageForIdentifier:kAchievementGamesCompletedOne]; 
tenGamePercentage = [self getAchievementPercentageForIdentifier:kAchievementGamesCompletedTen]; 
fiftyGamePercentage = [self getAchievementPercentageForIdentifier:kAchievementGamesCompletedFifty]; 
hundredGamePercentage = [self getAchievementPercentageForIdentifier:kAchievementGamesCompletedHundred]; 
fivehundredGamePercentage = [self getAchievementPercentageForIdentifier:kAchievementGamesCompletedFivehundred]; 
thousandGamePercentage = [self getAchievementPercentageForIdentifier:kAchievementGamesCompletedThousand]; 

if (oneGamePercentage != 100) { 

    [self reportAchievementIdentifier:kAchievementGamesCompletedOne percentComplete:100]; 

} 

if (tenGamePercentage != 100) { 

    gamesComplete = tenGamePercentage * 10; 
    gamesComplete++; 

    [self reportAchievementIdentifier:kAchievementGamesCompletedTen percentComplete:(gamesComplete * .10)]; 

} 

if (fiftyGamePercentage != 100) { 

    gamesComplete = fiftyGamePercentage * 50; 
    gamesComplete++; 


    NSLog(@"fifty game reported %f ",(gamesComplete * .02)); 
    [self reportAchievementIdentifier:kAchievementGamesCompletedFifty percentComplete:(gamesComplete * .02)]; 

} 

if (hundredGamePercentage != 100) { 

    gamesComplete = hundredGamePercentage * 100; 
    gamesComplete++; 

    [self reportAchievementIdentifier:kAchievementGamesCompletedHundred percentComplete:(gamesComplete * .01)]; 

} 

if (fivehundredGamePercentage != 100) { 

    gamesComplete = fivehundredGamePercentage * 500; 
    gamesComplete++; 

    [self reportAchievementIdentifier:kAchievementGamesCompletedFivehundred percentComplete:(gamesComplete * .002)]; 

} 

if (fivehundredGamePercentage != 100) { 

    gamesComplete = thousandGamePercentage * 1000; 
    gamesComplete++; 

    [self reportAchievementIdentifier:kAchievementGamesCompletedThousand percentComplete:(gamesComplete * .0001)]; 

} 

NSLog(@"100 game percentage -- > %f", hundredGamePercentage); 

} 
+0

你應該報告2.0的2% - 你不是在報告100.0爲100%嗎? – bshirley

回答

1

了許多問題。

  • 我很困惑的背後的邏輯遞增gamesComplete
  • 你應該在本地存儲它們而不是問的GameCenter每次。
  • -getAchievementPercentageForIdentifier:將始終返回0,因爲GameKit方法是異步的。
  • GKAchievement.percentageComplete百分比。你需要乘以100.

我認爲你必須做你自己的成就通知。

+0

gamesCImports是我如何從一個百分比轉換到知道他們完成了多少遊戲。這樣我可以轉身並報告更新百分比。我不乘以100,因爲值的數量發生了變化。我確實根據成就中的總共遊戲數來移動小數點。我越看它,它似乎就像我將不得不在本地存儲。雖然我真的希望跨設備同步。 –

+0

您可能會對「跨設備同步」做出不好的嘗試,但您必須處理Game Center調用爲異步的事實。 (「壞」,因爲更新涉及競爭條件和痛苦的錯誤處理,並且您仍然需要在本地存儲任何東西。) –