【发布时间】:2015-02-09 08:05:02
【问题描述】:
我正在开发一款包含两名 Game Center 玩家的回合制游戏,我希望允许自动匹配。
我了解到,要真正向玩家发送邀请,邀请玩家必须结束他/她的回合。这意味着调用这个方法:
- (void)endTurnWithNextParticipants:(NSArray *)nextParticipants turnTimeout:(NSTimeInterval)timeout matchData:(NSData *)matchData completionHandler:(void (^)(NSError *error))completionHandler
现在,我不明白“nextParticipants”数组的含义,以防比赛以自动匹配模式开始,据我所知,这是通过将参与者设置为 nil 来完成的,例如:
GKMatchRequest *request = [[GKMatchRequest alloc] init];
request.minPlayers = 2;
request.maxPlayers = 2;
request.playersToInvite = nil;
request.inviteMessage = @"Let’s play";
[GKTurnBasedMatch findMatchForRequest: request
withCompletionHandler: ^(GKTurnBasedMatch *match,
NSError *error) {
NSLog(@"%@", match);
}];
如果数组为nil,我不知道谁会加入比赛,我怎么可能把回合传给下一个玩家?如果我在 nextParticipants 参数中使用 nil,我当然会得到一个“无效的 nextParticipants 列表”错误。
Apple 的文档似乎对此保持沉默。
所以,我也不明白自动匹配的实际工作原理。是否会无条件地匹配任何两个已经开始新比赛的玩家自动匹配?我不能以某种方式选择我想要自动匹配的匹配类型吗? (假设,例如,游戏允许多个难度级别,而我不想自动匹配较低级别的玩家)。
编辑(根据 xcodegirl 的评论):
为了解决最后一点,只需在请求的 playerGroup 属性中添加对所需匹配类型进行编码的内容来扩展上述代码即可:
request.playerGroup = [Utils myEncodingAsNSUIntegerOfGameTypeGivenSomeParameters:...];
不过,坏事是 playerGroup 似乎不是 GKTurnBasedMatch 的可用属性。因此,如果您要列出您的比赛,包括未决的自动比赛,并希望显示有关您想玩的游戏类型的信息,您应该以其他方式存储此信息。
【问题讨论】:
标签: ios game-center