gpt4 book ai didi

iphone - 我如何知道 GKAchievement 是否已完成?

转载 作者:行者123 更新时间:2023-11-29 13:33:14 25 4
gpt4 key购买 nike

我已经为我的游戏建立了目标,并且一切正常接受让目标在任何目标完成后不再被调用的部分。

我知道 GKAchievement 类“completed”有一个属性,它是一个 bool 值,当成就 100% 完成时返回 yes。

这是当成就 100% 完成时调用的方法,它传递成就标识符 id 并报告成就:

- (void)AchivmentDidAchive:(id)Achivment{
NSString *identifier = Achivment;
NSLog(@"%@",identifier);
self.achivment = [[GKAchievement alloc]initWithIdentifier:identifier];
self.achivment.showsCompletionBanner = YES;


if (!self.achivment.completed) {
self.achivment.percentComplete = 100;
NSLog(@"Reproting!");
[self.achivment reportAchievementWithCompletionHandler: ^(NSError *error)
{

}];
}
else {
NSLog(@"Achivment Completed!");
} }

我在这里尝试做的是将完成百分比设置为 100 并在下次报告它,即希望再次被调用。

但它总是有效......关于如何处理这个有更好的主意吗?

最佳答案

在接口(interface)中添加变量和属性:

NSMutableDictionary *earnedAchievementCache;

@property (nonatomic, retain)NSMutableDictionary *earnedAchievementCache;

.m:

@synthesize earnedAchievementCache;

- (void) submitAchievement: (NSString*) identifier percentComplete: (double) percentComplete
{




if(self.earnedAchievementCache == NULL)
{

[GKAchievement loadAchievementsWithCompletionHandler: ^(NSArray *scores, NSError *error)
{
if(error == NULL)
{

NSMutableDictionary* tempCache= [NSMutableDictionary dictionaryWithCapacity: [scores count]];
for (GKAchievement* score in scores)
{
[tempCache setObject: score forKey: score.identifier];
}
self.earnedAchievementCache= tempCache;
[self submitAchievement: identifier percentComplete: percentComplete];
}


}];
}
else
{

GKAchievement* achievement= [self.earnedAchievementCache objectForKey: identifier];
if(achievement != NULL)
{
if((achievement.percentComplete >= 100.0) || (achievement.percentComplete >= percentComplete))
{


achievement= NULL;



}
achievement.percentComplete= percentComplete;
}
else
{
achievement= [[[GKAchievement alloc] initWithIdentifier: identifier] autorelease];
achievement.percentComplete= percentComplete;

[self.earnedAchievementCache setObject: achievement forKey: achievement.identifier];
}
if(achievement!= NULL)
{
//Submit the Achievement...


if (achievement.percentComplete>=100) {
//show banner
achievement.showsCompletionBanner = YES; //only in IOS 5+
}



[achievement reportAchievementWithCompletionHandler: ^(NSError *error)
{
if (error!=NULL){
NSLog(@"Error!!");
} else NSLog(@"all is well");

}];
}
}


}

在 dealloc 中:

[self.earnedAchievementCache release];

我正在使用缓存不提交已经提交/完成的分数

PS:代码是完美的,只需将其复制并粘贴到您的类中即可运行

关于iphone - 我如何知道 GKAchievement 是否已完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11309540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com