0

我的 Game Center 代码遇到了障碍,并且进行了研究和研究,并且正在使用似乎是公认的标准方法。我只是看不出哪里出了问题。

我正在编写一个四人纸牌游戏,如果有任何玩家退出,我希望他们能被邀请回到游戏中。

场景是这样的:一场比赛正在进行中,所有球员都在比赛中。一名玩家退出游戏。指定主机检测到断开连接,并使用 向 dropout 发送邀请addPlayersToMatch。dropout的inviteHandler已在开始时设置,并触发。辍学者收到邀请并调用似乎是标准代码的代码:

GKMatchmakerViewController *mmvc
mmvc = [[GKMatchmakerViewController alloc] initWithInvite:_pendingInvite];
mmvc.matchmakerDelegate = self;
[_presentingViewController presentViewController:mmvc animated:YES completion:nil];

在 dropout 机器上,MatchMakerViewController 适时出现,它只显示已经在比赛中的球员,他们很快就会被标记为“Ready”。然而,控制器显示消息“等待游戏开始...”,并且didFindMatch从未被触发。没有启动游戏的 UI(唯一的按钮是左上角的取消)。

奇怪的是主机上的机器inviteeResponseHandler确实触发了,所以主机似乎收到了辍学回来的消息。我在finishMatchmakingForMatch这里打电话,但它似乎没有做任何事情。

那么我如何告诉我的辍学者解雇 MatchMakerViewController?

扯掉我的头发!

4

1 回答 1

0

您是否正在处理 matchmaker 委托中的 did find match 方法?

(注意我的代码很快)但是你可以很容易地将它移植到 obj c

// 已找到点对点匹配,游戏应该开始

public func matchmakerViewController(viewController:  GKMatchmakerViewController!, didFindMatch match: GKMatch!)
{
    println("didFindMatch");
    if (!_matchStarted && match.expectedPlayerCount == 0) {
        match.delegate = self;
        mmvc.dismissViewControllerAnimated(true,completion:completedBlock);
    }

}
于 2015-04-02T17:58:37.413 回答