我正在测试一个 Game Center 游戏,特别是当玩家暂时退出(电话、后台等)时会发生什么我希望能够暂停游戏并在玩家再次活跃时重新连接。
这在两人游戏中可以正常工作,因为 match:shouldReinvitePlayer 功能会导致玩家被重新邀请,但 Apple 指定这仅适用于两人游戏。
在三人(或更多)游戏中,我在 appDelegate applicationWillEnterForeground 中处理此问题,如下所示;
GKMatchRequest *comebackRequest = [[GKMatchRequest alloc] init];
comebackRequest.playersToInvite = [NSArray arrayWithObjects:[[[[KYTGame instance] players] objectAtIndex:1] peerId], [[[[KYTGame instance] players] objectAtIndex:2] peerId], nil];
comebackRequest.minPlayers = 3;
comebackRequest.maxPlayers = 3;
comebackRequest.playerGroup = [[[KYTGame instance] gameCategory] playerGroup];
[[GKMatchmaker sharedMatchmaker] addPlayersToMatch:[[KYTGame instance] match]
matchRequest:comebackRequest
completionHandler:^(NSError *error) {
NSLog(@"%sPlayers are %@", __PRETTY_FUNCTION__, [[KYTGame instance] match ].playerIDs);
}];
发生的情况是现有的两个玩家高兴地“ping”走,当调用应用程序委托代码时(在再次活跃的玩家中)匹配不为零并且playedIDs数组中没有任何内容,但完成处理程序从未出现被调用并且再次“复活”的玩家永远不会重新连接。
我还在“实时”播放器的调试日志中发现了一个特殊的模式,显示进入后台的播放器已经多次将状态更改为“断开连接”,中间没有任何“连接”。
所以......当 GKMATCH 被推到后台然后复活时,是否可以期待它有意义。如何重新连接?可能吗?