我试图将交换发送到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 = 16
和minPlayers = 2
。我认为一旦两名球员坐下,这将自动开始比赛,但事实并非如此。
一旦比赛有两名球员,我就试图这样做:
if match.participants?.count == 2 {
match.status = GKTurnBasedMatchStatus.open
}
但后来我告诉status
是只读的。我无法手动设置它。
现在,通过常规GKMatch
,我正式开始比赛:
GKMatchmaker.shared().finishMatchmaking(for: match)
但GKTurnBasedMatch
似乎没有类似的东西。
我如何实际开始比赛,所以我可以在两位球员之间进行交换?
答案 0 :(得分:1)
Man,GKTurnBasedMatch
上的文档稀疏。
事情就是这样:你实际上并没有明确地开始GKTurnBasedMatch
。你只有结束它是明确的。
在游戏过程中,您只需将转弯从一个活动玩家转到另一个活跃玩家。第一位玩家坐下后,技术上就会开始游戏。
我遇到的问题是,当没有其他活跃的玩家时,我已经过了转弯。所以我不小心告诉游戏中心将转弯分配到一个空位。所以当错误消息告诉我
时Game is not active, session state is Matching
这意味着当前座位是空的并且仍然在寻找玩家来填补它。当前玩家的状态为Matching
(表示空座位)时,游戏显然会处于活动状态。
为什么这会影响发送交换,其目的是实现任何玩家之间的通信,无论当前玩家是谁,都超出了我。但是你去了。
解决方案:确保当前转弯由实际人员保持,并且不是空座位。然后你可以发送交流。否则你就不能。