Мултиплейър на услугите за игри на Google Play с превключване на активността

В моята Android игра имам походов мултиплейър. Потребителите чакат опонентите в лобито и всеки път, когато съвпадат точно 3, те отиват заедно в нова игрална зала, което е друга активност от лобито.

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

Някой пробвал ли е вече с Game Services? Как да започна, ако не мога да използвам 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
Благодаря ви много, страхотно е да имате авторитетен отговор :) Определено има случаи на употреба, в които трябва да превключвате между дейности, напр. ако имате лоби, където играчите се срещат и разговарят, и ако има достатъчно участници, отивате на ресурсоемката игра Activity. Но това би трябвало да е възможно, ако поставите всички неща от услугите на Google Play в услуга, към която след това се свързвате от дейностите, нали? - person caw; 31.05.2013
comment
Точно. Ако използвате една дейност само за събиране на играчи и предаване на списък с идентификатори на играчи на втората дейност, тогава втората дейност може да създаде стаята с тези играчи. Всичко е наред, стига да няма превключвател на активността, след като ръкостискането на мултиплейър е започнало. - person Bruno Oliveira; 03.06.2013
comment
@Burno Така например, ако съм по средата на шахматна партия, докато другият играч мисли и преди да направи ход, ако връзката ми бъде прекъсната, губя GamesClient? Искам да кажа, има ли начин ходът от другия потребител да ми бъде известен, когато вляза онлайн? - person raj; 02.07.2013
comment
Съжалявам за доста късния коментар, но току-що потърсих това в Google. По принцип ме наеха да актуализирам съществуваща игра с услуги за игра и т.н. Въпреки това, направих това само по предложения начин с фрагменти, в моите собствени игри. Компанията обаче не иска да разбивам тяхната доста сложна структура от дейности и фрагменти. Има напр. основна дейност, където са всички потребителски данни, песни, вход (!) и т.н. Ако песен действително бъде избрана и стартирана в игра, се стартира нова дейност. Каква е най-добрата практика за поддържане на връзката с 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 наоколо, но услугата може да е прекомерна, освен ако играта ви не изисква изпълнението на дълготраен не-UI код. От това, което съм преживял, ако превключвате между дейности, ще искате да запазите идентификатора на стаята(ите) и идентификатора(ите) на участниците, които в момента участват в играта.

Тъй като „частите за свързване“ са без състояние, просто се свържете отново, ако е необходимо. Можете дори да предадете идентификатора(ите) на стаята/участника към всяка дейност чрез пакета 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