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

Другие вопросы по тегам