编写苹果游戏中心应用程序(翻译 1.12 向玩家显示排行榜)

 

1.12 向玩家显示排行榜

问题

    你想使用图形用户界面向用户显示排行榜。

解决方案

    使用GKLeaderboardViewController类。

讨论

    为你的游戏构造内建的排行榜界面对游戏中心来说简直是小菜一碟。你要做的是建立一个使用视图控制器的iOS应用程序(这超出了本书的范围,不过它在iOS 4 Programming Cookbook中有详细地讲解)。对本节的剩余部分,假设你已经创建的应用程序拥有一个在导航控制器中的视图控制器。下面是让游戏中心构造内建的排行榜界面的步骤:

    1. 确保视图控制器符合GKLeaderboardViewControllerDelegate协议。

    2. 验证本地玩家(条目1.5)。

    3. 分配和实例化一个GKLeaderboardViewController对象,使用视图控制器的实例方法presentModalViewController:animated:向玩家显示。

    4. 在视图控制器中实现GKLeaderboardViewControllerDelegate协议的leaderboardViewControllerDidFinish:托管方法。

    5. 在leaderboardViewControllerDidFinish:托管方法的实现中,使用视图控制器的实例方法dismissModalViewControllerAnimated:废除排行榜视图控制器。

    GKLeaderboardViewController类的实例有三个重要属性:

    leaderboardDelegate

        该对象将收到来自排行榜视图控制器的托管消息。使用这些托管方法来废除排行榜视图控制器,或做其它一些事情。

    timeScope

        如果你想缩小排行榜视图控制器显示的成绩范围,可以设置该属性为下面的某个:

        GKLeaderboardTimeScopeToday

            成绩范围缩小到今天。

       GKLeaderboardTimeScopeWeek

            成绩范围缩小到本周。该值是默认值。

       GKLeaderboardTimeScopeAllTime

            显示所有的成绩。

    category

        要显示的排行榜分类。该属性值是可选的。如果没有设置该值,游戏中心将从默认的排行榜(你可以在iTunes Connect中设置默认的排行榜)取值。

    下面看看显示本周成绩的排行榜的示例,该排行榜的“Reference ID”为MGL1LB(条目1.9)。

    - (void)leaderboardViewControllerDidFinish:
    (GKLeaderboardViewController *)viewController{

    /* We are finished here */
    [self dismissModalViewControllerAnimated:YES];

    }

    - (void) viewDidLoad{

        [super viewDidLoad];

        GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];

        [localPlayer authenticateWithCompletionHandler:^(NSError *error) {

            if (error == nil){

                GKLeaderboardViewController *controller =
                    [[GKLeaderboardViewController alloc] init];

                /* The category for our leaderboard. We created this before */
                [controller setCategory:@"MGL1LB"];
                /* Only show the scores that were submitted this week */
                [controller setTimeScope:GKLeaderboardTimeScopeWeek];
                [controller setLeaderboardDelegate:self];
                [self presentModalViewController:controller
                                     animated:YES];
                [controller release];

            } else {
                NSLog(@"Could not authenticate the local player. Error = %@", error);
            }
        }];
    }

    运行程序,在程序加载视图控制器后,你将看到类似于图1-12的结果。


图 1-12 显示本周成绩的排行榜视图控制器

    因为我用条目1.10中的方法提交了三个玩家的成绩,因此你在排行榜中看到的是三个玩家的成绩。

阅读更多
个人分类: 翻译
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭