Многопользовательская игра в Google Play Game Services с переключением действий

В моей игре для Android есть пошаговый мультиплеер. Пользователи ждут противников в лобби, и когда ровно 3 совпадают, они вместе идут в новую игровую комнату, что является другим действием, чем лобби.

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

Кто-нибудь уже пробовал с игровыми сервисами? С чего начать, если я не могу использовать BaseGameActivity?


person caw    schedule 24.05.2013    source источник
comment
Я пытаюсь найти документацию по пошаговому мультиплееру, но больше не могу! Я почти уверен, что это было вместе с документацией в реальном времени, но теперь кажется, что Google удалил ее! Вы знаете, где его найти?   -  person thiagolr    schedule 16.09.2013


Ответы (3)


Итак, одна из причин, по которой мы записали все примеры игровых сервисов Google Play как игры с одним действием, заключается в том, что для переключения между действиями необходимо отключиться от GamesClient и подключить новое из нового действия.

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

В частности, если вы настраиваете многопользовательскую игру, отключение отключит вас от комнаты, поэтому вы не сможете переключиться на другую активность после начала рукопожатия :-)

person Bruno Oliveira    schedule 30.05.2013
comment
Большое спасибо, приятно получить авторитетный ответ :) Определенно есть случаи использования, когда вам приходится переключаться между действиями, например. если у вас есть лобби, где игроки встречаются и общаются, и если там достаточно участников, вы переходите к ресурсоемкой игровой Активности. Но это должно быть возможно, если вы поместите все материалы сервисов Google Play в сервис, к которому затем привяжетесь из действий, верно? - person caw; 31.05.2013
comment
Точно. Если вы используете одно действие только для того, чтобы собрать вокруг игроков и передать список идентификаторов игроков второму действию, то второе действие может создать комнату с этими игроками. Все в порядке, если нет переключателя активности после начала многопользовательского рукопожатия. - person Bruno Oliveira; 03.06.2013
comment
@Burno Так, например, если я нахожусь в середине шахматной партии, пока другой игрок думает и прежде чем сделать ход, если я отключусь, я потеряю GamesClient? Я имею в виду, есть ли способ, которым я уведомляюсь о движении другого пользователя, когда я выхожу в сеть? - person raj; 02.07.2013
comment
Извините за довольно поздний комментарий, но я только что погуглил. В основном меня наняли для обновления существующей игры с помощью игровых сервисов и т. д. Однако я сделал это только предложенным способом с фрагментами в своих собственных играх. Однако компания не хочет, чтобы я разбивал их довольно сложную структуру деятельности на фрагменты. Есть, например. основное действие, в котором находятся все пользовательские данные, треки, логин(!) и т.д. Если трек действительно выбран и запускается в игре, запускается новое действие. Как лучше всего поддерживать соединение с GamesClient? Или мы должны просто восстановить соединение? - person Aeefire; 13.01.2014
comment
@Aeefire: Если за последние несколько месяцев что-то не изменилось, у вас будут некоторые проблемы с этим. Как уже сказано в комментарии Бруно Оливейры: Activity переключатели требуют отключения от GamesClient, что невозможно после рукопожатия игроков. - person caw; 14.01.2014
comment
Или... вы просто не отключаетесь от игрового клиента. - person JacksOnF1re; 18.12.2014

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

Из примера проекта с нажатием кнопки я обнаружил, что они (Google) широко использовали фрагменты и оставались в пределах одного действия. В моей пользовательской игре я без проблем переключаюсь между действиями.

Вам нужно будет сохранить несколько частей объектов Google Play Game Services, но сервис может быть излишним, если только ваша игра не требует выполнения длительного кода, отличного от пользовательского интерфейса. Из того, что я испытал, если вы переключаетесь между действиями, вы захотите сохранить идентификатор комнаты (комнат) и идентификаторы участников, которые в настоящее время участвуют в игре.

Поскольку «части подключения» не имеют состояния, просто подключитесь повторно по мере необходимости. Вы даже можете передать идентификатор(ы) комнаты/участника для каждого действия через пакет Intent (или использовать подход с одноэлементным шаблоном). Таким образом, вы сэкономите на времени автономной работы, производительности и т. д.

person MiStr    schedule 30.05.2013

В документации объясняется, как использовать игровые сервисы без BaseGameActivity, когда это необходимо.

Например, во время входа:

https://developers.google.com/games/services/training/signin

Нажатие кнопки «Войти» должно инициировать процесс входа. Если вы используете базовый класс BaseGameActivity, представленный в примерах, просто вызовите метод beginUserInitiatedSignIn(). В противном случае вы должны вручную вызвать метод connect() вашего объекта GamesClient.

Что касается вашего конкретного вопроса, я не думаю, что это проблема, все управление находится внутри Google Play, вам просто нужно получить GamesClient, и, насколько я понял, соединение, установленное в одном действии, будет там, если вы получите к нему доступ из другой деятельности (но я еще не тестировал мультиплеер).

person thiagolr    schedule 24.05.2013