我最近一直在使用 Game Center(成就),我只知道如何做基于分数的成就。我怎么能做这样的事情?
-(IBAction) {
//Unlock Achievement
}
除此以外,我了解有关游戏中心的所有其他内容。谢谢你!
我最近一直在使用 Game Center(成就),我只知道如何做基于分数的成就。我怎么能做这样的事情?
-(IBAction) {
//Unlock Achievement
}
除此以外,我了解有关游戏中心的所有其他内容。谢谢你!
以下是从按钮创建 IBAction 的两种方法:
以编程方式:
UIButton *theButton = [[UIButton alloc] initWithFrame:CGRectMake(160, 240, 50, 20)];
[theButton addTarget:self action:@selector(unlockAch:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:theButton];
然后创建方法:
-(IBAction)unlockAch:(id)sender
{
//Unlock code
}
或者您可以使用界面生成器来完成。创建按钮并按住 Ctrl,单击按钮,然后拖入 .h 文件。您将看到一个弹出窗口,允许您创建一个操作并为其命名:
然后界面生成器会将其放入您的 .h 和 .m 文件中,它将被连接并准备就绪!
好的,首先我建议您使用单例辅助类(我们称之为 GCAssistant)来处理特定于游戏中心的操作。就像本教程中解释的那样。
在类头中,定义成就ID,以便在编码时更容易提交成就;如下所示:
#define kAchievementChainer @"1C"
#define kAchievementBoardClear @"1A"
#define kAchievement7Games @"1B"
#define kAchievement77Games @"1D"
#define kAchievementBreakAll @"1E"
#define kAchievementMultiplayer @"1F"
在助手类中,这是我用来提交成就的方法:
-(void) reportAchievementWithID:(NSString*) AchievementID {
[GKAchievement loadAchievementsWithCompletionHandler:^(NSArray *achievements, NSError *error) {
if(error) NSLog(@"error");
for (GKAchievement *ach in achievements) {
if([ach.identifier isEqualToString:AchievementID]) { //already submitted
NSLog(@"Already submitted");
return ;
}
}
GKAchievement *achievementToSend = [[GKAchievement alloc] initWithIdentifier:AchievementID];
achievementToSend.percentComplete = 100;
achievementToSend.showsCompletionBanner = YES;
[achievementToSend reportAchievementWithCompletionHandler:NULL];
}];
}
此方法检查之前是否提交过成就;如果不是,则提交。因此,您可以在项目中的任何地方进行操作(只要导入了 GCAssistant 类):
[[GCAssistant sharedInstance] reportAchievementWithID:kAchievementChainer];
它不在文档中,而且我在观看 WWDC 2012 视频之前也不知道这一点,但如果出现错误,iOS 5 会负责重新提交分数/成就。因此,您不必担心为 iOS 5 及更高版本手动存储未发送的提交等。
对于您的问题,您现在可能已经猜到了,您所要做的就是致电:
[[GCAssistant sharedInstance] reportAchievementWithID:kYourAchievementID];
在你的IBAction
方法中。祝你好运,如果你有任何问题,请告诉我。