1

我正在尝试向 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 = 16and minPlayers = 2。我原以为一旦两名球员就座,比赛就会自动开始,但事实并非如此。

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

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

但后来我被告知这status是只读的。我不能手动设置它。

现在,有了一个常规的GKMatch,我通过调用正式开始比赛:

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

但似乎没有类似的东西GKTurnBasedMatch

我如何真正开始比赛,以便我可以在两个玩家之间进行交流?

4

1 回答 1

1

伙计,文档GKTurnBasedMatch很少

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

在游戏过程中,您只需将回合从一位活跃玩家传递给另一位活跃玩家。从技术上讲,只要第一个玩家就座,游戏就开始了。

我遇到的问题是,当没有其他活跃玩家时,我已经通过了转牌。所以我不小心告诉 Game Center 把转弯分配给一个空座位。所以当错误信息告诉我

Game is not active, session state is Matching

这意味着目前的座位是空的,还在寻找一个球员来填补它。只要当前玩家的状态为Matching(表示空位),游戏显然就会退出活动状态。

为什么这会影响发送交换,其全部目的是使任何玩家之间能够进行交流,无论当前玩家是谁,我都无法理解。但是你去。

解决方法:确保当前轮到的是真人,而不是空位。然后你可以发送交换。否则你不能。

于 2017-03-02T17:25:06.297 回答