GKTurnBasedMatch не переходит к следующему игроку
Так что в моем матче два игрока. Когда игрок 1, создает новый матч, я использую endTurnWithNextParticipants
метод и предоставить nextParticipants свойство массива участников GKTurnBasedMatch, в котором есть два участника.
Но на устройстве Player 1, он продолжает говорить, что это ваша очередь. И устройство игрока 2, это говорит "их очередь".
- (void)endTurnWithNextParticipants:(NSArray<GKTurnBasedParticipant *> *)nextParticipants
turnTimeout:(NSTimeInterval)timeout
matchData:(NSData *)matchData
completionHandler:(void (^)(NSError *error))completionHandler
Какие-либо предложения?
Редактировать:
Вот как я использовал endTurnWithNextParticipants
, currentTurnBasedMatch
является экземпляром 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
}];
1 ответ
Я вижу две проблемы здесь:
Прежде всего, вы повторно используете массив, который уже сохранен в совпадении. Это не изменяемый массив и просто передать его обратно endTurnWithNextParticipants
приводит к всевозможному странному поведению, которое иногда может работать, но в большинстве случаев вызывает действительно странные проблемы. Я научился этому нелегко, сам: GameCenter: endTurnWithNext Участники не продвигаются. Создайте совершенно новый массив и скопируйте в него участников. Передайте этот новый массив в endTurnWithNextParticipants
Во-вторых, я не вижу, как вы пытаетесь настроить порядок участников в массиве, чтобы указать, что вы хотите перейти к следующему игроку. (в любом случае это не сработало бы правильно, повторно использовав неизменный массив в матче, но это все равно нужно сделать). Если у вас только два игрока, вы можете использовать метод, который я использовал в ссылке выше. Если у вас более двух игроков, вам нужно сделать что-то вроде принятого ответа на этот вопрос: автоматическое совпадение Game Center и endTurnWithNextParticipants