iPhone GameCenter приглашение с playerGroup - PullRequest
1 голос
/ 30 марта 2011

Я разработал приложение для iPhone, которое использует GameCenter. Чтобы поддерживать разные уровни моей игры, я установил playerGroup в классе GKMatchRequest. Если сопоставление начинается с помощью автоматического процесса сопоставления, оба пользователя знают playerGroup, но если используется процесс приглашения, приглашенный не знает playerGroup.

Я пытался прочитать playerGroup в методе

-   (void)matchmakerViewController:(GKMatchmakerViewController *)viewController didFindMatch:(GKMatch *)match

с помощью

[viewController matchRequest].playerGroup, но свойство playerGroup всегда возвращает 0, вместо правильной группы игроков.

У кого-нибудь есть идеи, как решить эту проблему. Мне нужно знать playerGroup, чтобы загрузить правильный уровень.

Большое спасибо за вашу помощь

Ответы [ 3 ]

1 голос
/ 27 ноября 2012

Я наткнулся на ту же проблему. В качестве обходного пути я посылаю рукопожатие со всей необходимой информацией о настройке игры через объект GKMatch. Я отправляю данные с помощью GKMatchSendDataReliable DataMode, чтобы рукопожатие не завершилось неудачей.

После того, как вся информация собрана клиентами, на ее основе создается и запускается актуальная игровая логика.

1 голос
/ 05 апреля 2011

Насколько я знаю, это встроенное ограничение Game Center.Я тоже боролся с этим и спрашивал на нескольких форумах, включая Apples devforums, без какого-либо ответа.Я написал отчет об ошибке в Apple и предлагаю вам сделать то же самое.

В качестве обходного пути в моей собственной игре, где у меня есть несколько различных наборов правил, из которых игроки выбирают, и где игроки должны использовать одни и те же правила.чтобы многопользовательские матчи работали, я ставлю «двойную проверку» после того, как игра фактически начинает проверять, что все соблюдают одни и те же правила: на всякий случай, если кого-то пригласили и используют неправильные правила.

Что яВыполнено, как только игра начнется (что вы должны обнаружить в методе didFindMatch GKMatchMakerViewControllerDelegate и в match: player: didChangeState: in GKMatchDelegate ) Я разрешаю игрокам войти в игру, а затем разослать пакеты с правилами, которые они используют, всем остальным игрокам.Когда они получают эти данные, они сопоставляют их со своими собственными правилами, и если кто-то использует неправильные правила, игра выдаст предупреждение и отключит матч.

Это немного уродливо, и очень ясно, чтоApple должна реализовать способ установки GKMatchRequest для GKMatchMakerViewController при инициализации по приглашению.Но, по крайней мере, это работает.

0 голосов
/ 29 июня 2016

Вы можете проверить группу игроков на запрос на совпадение следующим образом.

func player(player: GKPlayer, didAcceptInvite inviteToAccept: GKInvite)    {
    if inviteToAccept.playerGroup == 0 || inviteToAccept.playerGroup == myPlayerGroup  {
        inviteAccepted()
    }
    else {
        // TO SOMETHING
        myPlayerGroup = inviteToAccept.playerGroup
        inviteAccepted()
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...