проблемы с согласованием матча для 2 игроков в игровом наборе - PullRequest
8 голосов
/ 01 апреля 2011

У меня такое поведение, которое я не могу декодировать из GameKit.

иногда игрок, который сделал приглашение, застревает в цикле "ожидание ..." и не может закрыть сделку по его приглашению.

Я полагаю, что это связано с многозадачностью и обработчиком приглашений ... кажется, что если приложение приглашенного запускается с нуля, то приглашение может быть правильно принято. Но механизм этого не так прозрачен для меня.

Есть какие-нибудь подсказки относительно того, что может отсутствовать? Я ослеп от документации.

1 Ответ

1 голос
/ 31 августа 2011

Иногда, когда начинается матч между двумя игроками, возможно, что у одного игрока еще нет подключенного состояния. Перед тем, как начать игру, вам следует проверить, подключено ли больше игроков. Если значение больше 0, вместо запуска игры подождите, пока игрок подключится, и запускайте игру только тогда, когда этот игрок подключен.

Таким образом, код будет выглядеть примерно так внутри вашего метода, в котором вы настраиваете игру:

if (currentMatch.expectedPlayerCount) {
    waiting = YES;
}

И вы бы реализовали этот метод делегата:

- (void)match:(GKMatch *)match player:(NSString *)playerID didChangeState:(GKPlayerConnectionState)state
{
    if (state == GKPlayerStateConnected) {
        if (waiting) {
            waiting = NO;
            // start the game now
        }
    } else if (state == GKPlayerStateDisconnected) {
        // handle disconnect
    }
}
...