1

所以我的比赛有两名球员。当玩家 1 创建一个新匹配时,我使用endTurnWithNextParticipants方法并为 nextParticipants 提供 GKTurnBasedMatch 的参与者数组属性,该属性有两个参与者。

但是在播放器 1 设备上,它一直说轮到你了。玩家 2 的设备上显示“轮到他们了”。

- (void)endTurnWithNextParticipants:(NSArray<GKTurnBasedParticipant *> *)nextParticipants
                        turnTimeout:(NSTimeInterval)timeout
                          matchData:(NSData *)matchData
                  completionHandler:(void (^)(NSError *error))completionHandler

有什么建议么?

编辑:

这是我使用的方式endTurnWithNextParticipantscurrentTurnBasedMatch是 GKTurnBasedMatch 的一个实例。我确实验证了该实例确实包含两个参与者(玩家 1 和 2)正确。并且完成没有任何错误。

[self.currentTurnBasedMatch endTurnWithNextParticipants:self.currentTurnBasedMatch.participants turnTimeout:GKTurnTimeoutDefault matchData:data completionHandler:^(NSError * _Nullable error) {
    MyNSLogSys2O(@"completion error:", error);  //default 1 week timeout
}];
4

1 回答 1

2

我在这里看到两个问题:

首先,您正在重新使用已经存储在匹配项中的数组。那是一个不可变的数组,只需将其再次传回即可endTurnWithNextParticipants导致各种奇怪的行为,这些行为有时可能会起作用,但大多数时候会导致非常奇怪的问题。我自己学会了这一点:GameCenter: endTurnWithNextParticipants not advance。创建一个全新的数组并将参与者复制到其中。将该新数组传递到endTurnWithNextParticipants

其次,我没有看到您试图调整数组中参与者的顺序以表明您要更改为下一个玩家。(在比赛中重新使用不可变数组无论如何都不会正常工作,但仍然必须这样做)如果你只有两个玩家,你可以使用我在上面链接中使用的方法。如果你有两个以上的玩家,你需要做一些类似这个问题的公认答案:Game Center's Auto-match and endTurnWithNextParticipants

于 2015-11-27T20:01:18.457 回答