2011-06-28 6 views
0

私のゲームセンターの成果がGame Centerに表示されているので、私の実装が正しいと思います。GameKit達成の質問

その上にいくつかの質問があります。

まず、ゲームセンターで画像にパーセント表示が表示されていません。つまり、達成度の2%が表示されています(ただし、.02が報告されています)。実績が報告されていることはわかっています。なぜなら、100を投げれば成績が記録されるからです。

第2に、私の業績は報酬を受けるとユーザーに表示されません。私が理解しているように、この機能はゲームキットによって自動的に処理されると考えられていました。私は小さなモダールが表示されてユーザーに成果を達成したことを知らせる印象を受けました。私は今、私がしなければならないことがあると思っています。小さなモーダルが現れないからです。

私は自分のコードを添付しますが、そのほとんどは在庫です。

私の最後の問題はスコアの取得です。私は現在の実装がうまくいかないように自分のスコアを格納しなければならないと考えています。事前に

おかげで...

- (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%について2.0を報告する必要があります - あなたは100%について100.0を報告していませんか? – bshirley

答えて

1

多くの問題...

  • 私はあなたがローカルに保存する代わりにゲームセンターを尋ねる必要がありますgamesComplete
  • をインクリメント背後にあるロジックによって混乱しています毎回。
  • -getAchievementPercentageForIdentifier:は、GameKitのメソッドが非同期であるため、常に0を返します。
  • GKAchievement.percentageCompleteは、パーセントです。あなたは100を掛ける必要があります。

自分の達成通知をする必要があると思います。

+0

gamesCImportsは、パーセンテージからどれくらい多くのゲームが完了したかを知ることに変わります。そうすれば私は回って、更新されたパーセンテージを報告することができます。私は値の数が変わるので100倍しません。私は成果の合計ゲーム数に基づいて小数点を移動しました。私はそれを見るほど、私はローカルに保管しなければならないようです。私は本当にクロスデバイスの同期を望んでいた。 –

+0

「デバイス間の同期」では悪い試みがあるかもしれませんが、Game Centerの呼び出しが非同期であるという事実を処理する必要があります。 ( "Bad"は競合状態と厄介なエラー処理が関係するため、とにかくローカルに何かを保存する必要があるためです)。 –