Многопользовательская игра Game Center, очень долгое время ожидания соединения

Я реализовал пошаговую игру для двух игроков, используя подбор игроков/многопользовательскую игру Game Center, другими словами, используя GKMatch. Это работает хорошо. Есть только одна проблема: когда один игрок отключается (то есть выходит из приложения), проходит некоторое время, прежде чем другие игроки получат уведомление об этом (с помощью match:player:didChangeState:). Иногда даже 30 секунд.

Это не хороший UX. Я не хочу, чтобы игрок ничего не ждал, если другой игрок уже отключился 30 секунд назад.

2 вопроса:

  • Это проблема только с тестовым сервером?
  • Если нет, что я могу сделать, чтобы сократить/устранить этот период ожидания?

person Rits    schedule 10.02.2011    source источник
comment
Возможно, это просто проблема с сетью. Пробовали с другой сетью?   -  person Youssef    schedule 10.02.2011
comment
Здравствуйте, у меня похожая проблема. Я реализовал многопользовательскую игру с 4 игроками. Теперь, когда 1 игрок отключается, все 3 игрока отключаются. Я хочу, чтобы 1 игрок отключился, тогда остальные 3 должны продолжать играть. Возможно ли это. И   -  person ios developer    schedule 03.10.2012


Ответы (1)


Я не полагался на notifyPlayer GC. Все, от DC до выхода из игры, до приема вызовов, которые я обрабатываю своими собственными кодами.

для моего кода, когда игрок A нажимает кнопку «Домой», это означает, что в applicationDidEnterBackground делегата приложения данные отправляются игроку B, чтобы сообщить, что игрок A вышел из игры. Таким образом, когда игрок А выходит, игрок Б сразу узнает, что игрок А вышел. Вместо того, чтобы ждать, пока игровой центр уведомит вас.

person xuanweng    schedule 11.02.2011
comment
К сожалению, это не решает мою проблему. Моя игра временно продолжается в фоновом режиме с использованием фоновой задачи iOS 4, поэтому я не хочу, чтобы соединение закрывалось, когда пользователь нажимает кнопку «Домой». - person Rits; 11.02.2011
comment
Это сложно... ха-ха... поскольку вы хотите, чтобы приложение запускалось в фоновом режиме, когда игрок А нажимает кнопку «Домой», как узнать, действительно ли игрок А хочет выйти из игры? При каком условии игра отключится?? - person xuanweng; 12.02.2011
comment
У игрока есть 20 секунд, чтобы сделать свой ход. - person Rits; 13.02.2011
comment
означает, что через 20 секунд, когда игрок А не отвечает, он получает dc? Если игрок А нажимает кнопку «Домой», потому что хочет выйти, игрок Б должен ждать 20 + 30 секунд?? - person xuanweng; 13.02.2011
comment
В основном да. Потому что на тот момент еще не ясно, каково было намерение пользователей; выйти или многозадачность к другому приложению. - person Rits; 27.02.2011
comment
о.. ок... в таком случае поставьте таймер для игрока Б.. если он не ответит через 20 секунд, тогда dc... - person xuanweng; 27.02.2011