Определение GKSessionModeServer и GKSessionModeClient - PullRequest
0 голосов
/ 15 ноября 2011

Моя проблема в том, что мне нужно подключить много устройств, используя GameKit framework.Все отлично работает с двумя подключениями (GKSessionModePeer). Я много искал в интернете, как подключить более двух устройств и что я получил, это использовать GKSessionModeServer и GKSessionModeClient. Я также читал документацию Apple.

Но до сих пор нет четкого решения о том, как использовать GKSessionModeServer, а GKSessionModeClient означает, какое устройство будет действовать как сервер, а какое - как клиент.

Пожалуйста, если кто-нибудь знает, какчтобы справиться с этим или каким подходом я должен следовать, скажите мне.

Любая помощь будет высоко оценена.

1 Ответ

1 голос
/ 15 ноября 2011

Я не пробовал это с 3 устройствами в игре, но, возможно, это поможет вам (это работало с 5 устройствами в лобби).

  1. Я не использую GKSessionModeServer / Client, я использую GKSessionModePeer.
  2. Я делаю автоподключение - это означает, что когда появляется новое устройство, другие устройства отправляют ему запрос на подключение, и он автоматически принимается (поэтому, если у нас включено 3 устройства, все они соединены вместе)
  3. После подключения всех устройств вы можете отправлять поддельные приглашения, отправляя обычные пакеты данных (I_INVITE_YOU, INVITATION_DECLINED, INVITATION_ACCEPTED), а затем отключая другие устройства, если у вас достаточно игроков. Вы можете добавить устройства, которые отключили вас, к вашему временному списку игнорирования - сбросьте его, если пользователь вернется в главное меню или нажмите
  4. Когда у вас есть все участники игры, они могут решить, кто есть кто:
  5. Если ваша игра не отправляет много данных, вы можете выполнить несколько простых проверок на udid или peerid: допустим, устройство с наименьшим значением udid - это СЕРВЕР, другие - КЛИЕНТЫ
  6. Если ваша игра отправляет тонны данных, я заметил, что сервер должен быть САМЫМ МЕДЛЕННЫМ - дело в том, что когда сервер работает быстро (работает, скажем, со скоростью 50 кадров в секунду), он отправляет данные с аналогичной частотой кадров, поэтому, когда клиент медленный (скажем, 20 кадров в секунду), он получает около 2 пакетов с сервера на кадр, что еще больше замедляет его. Вопрос в том, как решить, какое устройство медленнее. Я использовал средний FPS

это звучит немного сложно, но работает намного лучше, чем стандартная схема приглашения ios (это был травмирующий опыт с 3.1)

Привет!

...