本文共 1650 字,大约阅读时间需要 5 分钟。
1.6 获取本地玩家的信息
问题
验证了本地玩家,你还需要获得他的别名和其它一些信息。
解决方案
使用GKLocalPlayer的各个有效属性,如alias。
讨论
GKPlayer对象表示游戏中心中的玩家。每个玩家拥有一些非常重要的属性:
playerID:
玩家标识。该标识不应当显示给玩家。在排行榜中,玩家希望看到的是别名。在许多游戏中心方法中,我们首先要能够获取玩家的ID,并使用它们加载玩家的其它信息,比如某特定排行榜中的成绩。换句话说,仅当和游戏中心API打交道时玩家ID才会重要。
alias:
在游戏中心注册过程中玩家设置的别名。isFriend:
该属性返回一个BOOL类型的值。它用来决定该玩家是否是当前已通过验证的本地玩家的好友。该属性仅在GKPlayer中有效。虽然GKLocalPlayer是GKPlayer的子类,但它不能访问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。
转载地址:http://jeami.baihongyu.com/