这是一个古老的线程,但因为我最近与此相关的一些挣扎,我想这可能帮助其他人谁通过:
参加者插槽的比赛中,是否占用。玩家填补这些插槽,因为他们被发现。整个“总是轮到我”的事情等同于:您正在使用预设数量的参与者(插槽)进行游戏,但这些插槽可能尚未填充。这使得在某些情况下向用户显示信息非常困难,因为您只是从空的参与者字段中获得空值,而且您需要正常处理这些情况。在第一回合中,后来的用户甚至不知道他们已经被邀请,直到每个前面的玩家转牌。当你轮到你时,你需要从你的游戏中取出蒸汽,然后你的被邀请者因为不能玩而拒绝。国际海事组织,该模型只适用于自动匹配。邀请朋友参加比赛时,我不太喜欢用户体验。但是,就是这样。
因此,为了结束转弯,您基本上需要带上您的match.participants数组并将当前(又名本地)球员移动到列表的末尾。不要试图直接编辑match.participants,这会导致各种片状。相反,建立一个新的数组并按照你想要的顺序注入项目。我用这个代码,我认为最初来自雷Wenderlich网站:
NSMutableArray *nextParticipants = [NSMutableArray new];
for (GKTurnBasedParticipant *participant in theMatch.participants)
{
if ([participant.player.playerID isEqualToString:[GKLocalPlayer localPlayer].playerID])
{
[nextParticipants addObject:participant];
}
else
{
[nextParticipants insertObject:participant atIndex:0];
}
}
然后结束之交为:
[theMatch endTurnWithNextParticipants:nextParticipants
turnTimeout:timeOutSeconds
matchData:updatedMatchData
completionHandler:^(NSError *error)
{
....
}];
这工作,因为所有的参与者槽的存在,从目前看比赛被实例化,无论玩家是否已经填充了这些参与者时隙。这些未填充的插槽将处于“受邀”或“匹配”状态。当其中一个插槽泡泡到阵列的顶部时,让它“轮到”,然后游戏中心去寻找被邀请者/自动匹配的玩家来填充插槽并轮流。
感谢您的解释。我仍然无法包裹头脑的问题是我的下一个参与者数组应包含哪些内容,如果这仅仅是一个双人游戏而我的对手是零。 –
这是“参与者”属性中不是本地玩家的项目。 –