问题
你需要使用图形用户界面向本地玩家显示其已经获得或已经开启的成就。
解决方案
使用GKAchievementViewController类。
讨论
游戏中心可以构造内建成就界面。你所要做的是建立一个使用视图控制器的iOS程序(在iOS 4 Programming Cookbook中有详细地讲解)。
让游戏中心构造内建成就界面的步骤如下:
1. 确保在程序中拥有一个视图控制器;确保视图控制器符合GKAchievementViewControllerDelegate协议。
2. 验证本地玩家(条目1.5)。
3. 分配和实例化一个GKAchievementViewController对象,使用视图控制器的presentModalViewController:animated:实例方法向玩家显示。
4. 在视图控制器中实现GKAchievementViewControllerDelegate协议的achievementViewControllerDidFinish:托管方法。
5. 在achievementViewControllerDidFinish:的实现中,使用视图控制器的dismissModalViewControllerAnimated:实例方法废除成就视图控制器。
GKAchievementViewController类的实例有一个重要的属性,叫作achievementDelegate。它将从成就视图控制器接收托管消息。使用这些托管方法以废除成就视图控制器以及其它事物。
看看向当前本地玩家显示其所有成就的示例:
- (void)achievementViewControllerDidFinish:
(GKAchievementViewController *)viewController{
/* We are finished here */
[self dismissModalViewControllerAnimated:YES];
}
- (void) viewDidLoad{
[super viewDidLoad];
GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
[localPlayer authenticateWithCompletionHandler:^(NSError *error) {
if (error == nil){
GKAchievementViewController *controller =
[[GKAchievementViewController alloc] init];
[controller setAchievementDelegate:self];
[self presentModalViewController:controller
animated:YES];
[controller release];
} else {
NSLog(@"Could not authenticate the local player. %@", error);
}
}];
}
运行程序,加载视图控制器之后,可以看到和图1-16类似的结果。
图 1-16 iOS模拟器中的成就视图控制器