编写苹果游戏中心应用程序(翻译 1.6 获取本地玩家的信息)

 

1.6 获取本地玩家的信息

问题

    验证了本地玩家,你还需要获得他的别名和其它一些信息。

解决方案

    使用GKLocalPlayer的各个有效属性,如alias

讨论

    GKPlayer对象表示游戏中心中的玩家。每个玩家拥有一些非常重要的属性:

    playerID

        玩家标识。该标识不应当显示给玩家。在排行榜中,玩家希望看到的是别名。在许多游戏中心方法中,我们首先要能够获取玩家的ID,并使用它们加载玩家的其它信息,比如某特定排行榜中的成绩。换句话说,仅当和游戏中心API打交道时玩家ID才会重要。

    alias
         在游戏中心注册过程中玩家设置的别名。

    isFriend
         该属性返回一个BOOL类型的值。它用来决定该玩家是否是当前已通过验证的本地玩家的好友。

        该属性仅在GKPlayer中有效。虽然GKLocalPlayerGKPlayer的子类,但它不能访问isFriend

    此处是获取本地玩家信息的演示代码。在该代码中,我想要演示的东西分为两个部分,每个部分都用块对象表示。其中的一个块对象简单地用来打印本地玩家的别名和玩家ID:

        void (^printLocalPlayerInfo)(void) = ^{

            GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
            if ([localPlayer isAuthenticated] == YES){

                NSLog(@"Player ID = %@", [localPlayer playerID]);
                NSLog(@"Player Alias = %@", [localPlayer alias]);
            }
        };

    第二个块对象作出验证,然后调用第一个块对象。

        - (void) authenticateLocalPlayerAndGetHerInfo{

            dispatch_queue_t concurrentQueue =
                dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

            dispatch_async(concurrentQueue, ^(void) {
                GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
                if ([localPlayer isAuthenticated] == NO){
                    [localPlayer authenticateWithCompletionHandler:^(NSError *error) {
                        if (error == nil){
                            NSLog(@"Successfully authenticated.");
                            dispatch_async(concurrentQueue, printLocalPlayerInfo);
                        } else {
                            NSLog(@"Failed to authenticate. Error = %@", error);
                        }
                    }];
                } else {
                    dispatch_async(concurrentQueue, printLocalPlayerInfo);
                }
            });
        }

    直白又简单!如果我调用authenticateLocalPlayerAndGetHerInfo方法,将打印下面的信息到控制台:

        Successfully authenticated.
        Player ID = G:1428628142
        Player Alias = Test Game User 1

    该信息仅当本地玩家已经通过验证才会输出到控制台。如果玩家还没有登录,则会提示玩家进行登录。如果玩家故意不登录或未能成功登录,则打印出错信息。

    本地玩家(GKLocalPlayer),和其它玩家(GKPlayer)不同,拥有一个叫作friends的属性,它定义了本地玩家的朋友信息。关于它的更多信息,参考条款1.8。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值