2015-11-27 2 views
1

Итак, у меня в матче два игрока. Когда игрок 1 создает новое совпадение, я использую метод endTurnWithNextParticipants и поставляю nextParticipants с помощью свойства массива участников GKTurnBasedMatch, которое состоит из двух участников.GKTurnBasedMatch не переходит к следующему игроку

Но на устройстве 1 игрока он продолжает говорить, что это ваш ход. И устройство игрока 2, оно говорит «их очередь».

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

Любые предложения?

Edit:

Вот как я 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 
}]; 
+0

Просьба показать код, в котором вы создаете и заполнить массив nextParticipants. – Thunk

+0

@Thunk: см. Мое редактирование. – EmilyJ

ответ

1

Я вижу две проблемы здесь:

Прежде всего, вы повторно использовать массив, который уже хранится в матче. Это неперемещаемый массив и просто передающий его обратно на endTurnWithNextParticipants приводит к разным рода странным поведением, которое может иногда работать, но в большинстве случаев вызывает странные проблемы. Я научился этому самому, самому себе: GameCenter: endTurnWithNextParticipants not advancing. Создайте совершенно новый массив и скопируйте участников в него. Передайте этот новый массив в endTurnWithNextParticipants

Во-вторых, я не вижу, как вы пытаетесь настроить порядок участников в массиве, указав, что хотите перейти к следующему игроку. (в любом случае это не сработало бы правильным путем повторного использования неизменяемого массива в матче, но это еще нужно сделать). Если у вас есть только два игрока, вы можете использовать метод, который я использовал в приведенной выше ссылке. Если у вас более двух игроков, вам нужно сделать что-то вроде принятого ответа по этому вопросу: Game Center's Auto-match and endTurnWithNextParticipants

+0

Спасибо. Я действительно понял это сразу после ответа на ваш комментарий ... Ваш комментарий сделал трюк. Хорошие советы по массиву! – EmilyJ

Смежные вопросы