如何检索游戏中心的成就百分比并提交修改?



我已经配置了Game Center的所有功能,下面的代码是我用来解锁成就的,非常好用。

- (void) unlockAchievementThis:(NSString*)achievementID {
    GKAchievement *achievement = [[GKAchievement alloc] initWithIdentifier:
                                  achievementID];
    if (achievement){
        achievement.percentComplete = 100;
        achievement.showsCompletionBanner = true;
        [GKAchievement reportAchievements:@[achievement] withCompletionHandler:^(NSError *error) {
            if (error != nil) {
                NSLog(@"Error at unlockAchievementThis()");
            }
        }];
    }
}

现在我的问题是不断取得成就。我有另一种方法来处理很少的成就,我希望之前的成就百分比以常数增加。

我的游戏是cpp,我不太了解ObjC。我在下面得到了一些代码,我认为这些代码应该对我有所帮助,但我不知道如何使用成就描述来获得百分比,并将incStep添加到其中,然后将其提交给后台游戏中心。

- (void) incrementAchievementThis:(NSString*)achievementID :(NSInteger) incStep
{
    NSMutableDictionary *achievementDescriptions = [[NSMutableDictionary alloc] init];
    [GKAchievementDescription loadAchievementDescriptionsWithCompletionHandler:^(NSArray *descriptions, NSError *error) {
        if (error != nil) {
            NSLog(@"Error getting achievement descriptions: %@", error);
        }
        for (GKAchievementDescription *achievementDescription in descriptions) {
            [achievementDescriptions setObject:achievementDescription forKey:achievementDescription.identifier];
        }
    }];

百分比存储在GKAchievement percentComplete中,因此您需要加载(并更新和报告)GKAchievement s而不是GKAchievementDescription s。

GKAchievmenentDescription在iTunes Connect中配置,从应用程序的角度来看是"只读"的。

最后我通过下面的代码得到了输出。。。

- (void) incrementAchievementThis:(NSString*)achievementID :(NSInteger) incStep
{
    [GKAchievement loadAchievementsWithCompletionHandler:^(NSArray *achievements, NSError *error)
     {
         if (error == nil) {
             for (GKAchievement* achievement in achievements) {
                 if ([achievementID isEqualToString:achievement.identifier]) {
                     achievement.percentComplete += incStep;
                     [GKAchievement reportAchievements:@[achievement] withCompletionHandler:^(NSError *error) {
                            if (error != nil) {
                                NSLog(@"Error at incrementAchievementThis()");
                            }
                    }];
                 }
             }
         }
         else {
             NSLog(@"Error in loading achievements: %@", error);
         }
     }];
}

最新更新