我开始在我的iOS应用程序中实现Game Center,我想将玩家ID用作应用程序其他位置的唯一标识符。但是,当我尝试声明一个变量时:

var playerID: String? { GKPlayer.playerID }

我收到错误Instance member 'playerID' cannot be used on type 'GKPlayer'.在Game Center文档中查看,但没有找到任何可以帮助我的信息(但很可能是我,而不是文档)。声明playerID之前是否需要执行一些代码?这些都是在我对本地播放器进行身份验证之后完成的。

我是否需要使用loadPlayers(forIdentifiers:withCompletionHandler:)来获取单个本地用户的ID?

最佳答案

您需要先获取玩家对象,然后才能查找每个对象的玩家ID。 loadPlayers对您没有帮助,因为您在调用loadPlayers时必须已经知道想要的播放器ID。

您可以在两个地方获得播放器对象。首先,有一个“本地玩家”已登录到设备上的Game Center。其次,实时比赛和基于回合的比赛都包含该时刻所有参与该比赛的所有玩家的列表。

我不知道快速的语法,但是在obj-c中,获取本地播放器的ID如下:

GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];
NSString *playerID = localPlayer.playerID

比赛对象将具有该比赛中整个玩家集合的对象数组。在实时GKMatch对象中,该属性称为players。在基于回合的GKTurnBasedMatch对象中,该属性称为participants。例如,获取基于回合比赛的参与者列表,如下所示:
for (GKTurnBasedMatchParticipant *participant in match.participants)
{
     GKPlayer *player = participant.player;
     NSString *playerID = player.playerID;
}

请注意,在基于回合的比赛中,当您为6个玩家创建比赛时,创建者(本地玩家)将占据第一个位置。参与者2-6将是空的,直到这些玩家实际加入游戏(在他们的第一回合)。

拥有playerID后,就可以在其余的代码中将其用作标识符。以后,如果要查找有关播放器的详细信息,则可以使用要查找的播放器ID调用loadPlayers

08-19 11:47