如何实际启动GKTurnBasedMatch以便我可以发送交换?

时间:2017-02-17 16:22:20

标签: ios game-center gkturnbasedmatch

我试图将交换发送到GKTurnBasedMatch中的其他玩家。当我发送它时,我的完成处理程序会收到一条大错误消息,其中包含以下描述:

The requested operation could not be completed because the session is in an invalid state.
Game is not active, session state is Matching

我希望比赛在只有两名球员时开始,但总共允许16名球员。我自然而然地设置了maxPlayers = 16minPlayers = 2。我认为一旦两名球员坐下,这将自动开始比赛,但事实并非如此。

一旦比赛有两名球员,我就试图这样做:

    if match.participants?.count == 2 {
      match.status = GKTurnBasedMatchStatus.open
    }

但后来我告诉status是只读的。我无法手动设置它。

现在,通过常规GKMatch,我正式开始比赛:

GKMatchmaker.shared().finishMatchmaking(for: match)

GKTurnBasedMatch似乎没有类似的东西。

我如何实际开始比赛,所以我可以在两位球员之间进行交换?

1 个答案:

答案 0 :(得分:1)

Man,GKTurnBasedMatch上的文档稀疏。

事情就是这样:你实际上并没有明确地开始GKTurnBasedMatch。你只有结束它是明确的。

在游戏过程中,您只需将转弯从一个活动玩家转到另一个活跃玩家。第一位玩家坐下后,技术上就会开始游戏。

我遇到的问题是,当没有其他活跃的玩家时,我已经过了转弯。所以我不小心告诉游戏中心将转弯分配到一个空位。所以当错误消息告诉我

Game is not active, session state is Matching

这意味着当前座位是空的并且仍然在寻找玩家来填补它。当前玩家的状态为Matching(表示空座位)时,游戏显然会处于活动状态。

为什么这会影响发送交换,其目的是实现任何玩家之间的通信,无论当前玩家是谁,都超出了我。但是你去了。

解决方案:确保当前转弯由实际人员保持,并且不是空座位。然后你可以发送交流。否则你就不能。