0

我最近一直在使用 Game Center(成就),我只知道如何做基于分数的成就。我怎么能做这样的事情?

-(IBAction) {

//Unlock Achievement 

}

除此以外,我了解有关游戏中心的所有其他内容。谢谢你!

4

2 回答 2

1

以下是从按钮创建 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 文件中,它将被连接并准备就绪!

在此处输入图像描述

于 2012-07-18T22:05:56.180 回答
0

好的,首先我建议您使用单例辅助类(我们称之为 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方法中。祝你好运,如果你有任何问题,请告诉我。

于 2012-07-20T08:38:12.900 回答