游戏中心IBAction成就

时间:2012-07-18 19:22:15

标签: iphone ios xcode game-center

我最近一直在与Game Center合作(成就),我只知道如何做基于成绩的成就。我怎么能这样做?

-(IBAction) {

//Unlock Achievement 

}

除了这个,我了解游戏中心的所有其他内容。谢谢!

2 个答案:

答案 0 :(得分: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文件中。您将获得一个弹出窗口,允许您创建一个操作并为其命名:

enter image description here

然后界面构建器会将其放入.h和.m文件中,它将被连接并准备就绪!

enter image description here

答案 1 :(得分:0)

好的,首先我建议您使用单例辅助类(让我们称之为GCAssistant)来处理游戏中心特定的操作。如this教程中所述。

在课程标题中,定义成就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方法中。祝你好运,如果你有任何问题,请告诉我。