1

我正在测试一个 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 被推到后台然后复活时,是否可以期待它有意义。如何重新连接?可能吗?

4

1 回答 1

2

我将此提交给 Apple 支持,但遗憾的是该功能不可用;尽管 Game Kit 在对等网络中最多支持 4 名玩家,但如果游戏中有超过 2 名玩家,则 api 不会提供在其中任何人断开连接时重新连接的方法。

于 2012-09-07T13:09:36.513 回答