我已经配置了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);
}
}];
}