iOS Gamecenter程序化匹配
我正在尝试实现一个实时的多人游戏与自定义用户界面(没有GKMatchMakerViewController
)。 我使用的是startBrowsingForNearbyPlayersWithReachableHandler: ^(NSString *playerID, BOOL reachable)
find一个本地播放器,然后用GKMatchmaker
单例(我已经发起)发起一个匹配请求。
这是我遇到麻烦的地方。 当我发送请求时,完成处理程序几乎立即触发,没有错误,并且它返回的匹配具有预期的玩家数为零。 同时,另外一个玩家肯定没有回应这个要求。
相关代码:
- (void) findMatch { GKMatchRequest *request = [[GKMatchRequest alloc] init]; request.minPlayers = NUM_PLAYERS_PER_MATCH; //2 request.maxPlayers = NUM_PLAYERS_PER_MATCH; //2 if (nil != self.playersToInvite) { // we always successfully get in this if-statement request.playersToInvite = self.playersToInvite; request.inviteeResponseHandler = ^(NSString *playerID, GKInviteeResponse response) { [self.delegate updateUIForPlayer: playerID accepted: (response == GKInviteeResponseAccepted)]; }; } request.inviteMessage = @"Let's Play!"; [self.matchmaker findMatchForRequest:request withCompletionHandler:^(GKMatch *match, NSError *error) { if (error) { // Print the error NSLog(@"%@", error.localizedDescription); } else if (match != nil) { self.currentMatch = match; self.currentMatch.delegate = self; // All players are connected if (match.expectedPlayerCount == 0) { // start match [self startMatch]; } [self stopLookingForPlayers]; } }]; }
弄清楚了! 我需要在我的邀请处理程序中调用- (void)matchForInvite:(GKInvite *)invite completionHandler:(void (^)(GKMatch *match, NSError *error))completionHandler
,以便两个玩家拥有相同的匹配数据。