2013-05-24 13 views
16

W mojej aplikacji na Androida mam turowy tryb dla wielu graczy. Użytkownicy czekają na przeciwników w lobby, a ilekroć dokładnie 3 są dobierani, udają się do nowego pokoju gier razem, co jest inną czynnością niż lobby.Google Play Usługi gier dla wielu graczy z przełączaniem aktywności

Dokumenty sugerują, aby działania rozszerzyły BaseGameActivity. Ale kiedy przełączam działanie, gdy gracze są już połączeni, nie muszę umieszczać części łączących w usłudze, z którą wiąże się moja aktywność?

Czy ktoś próbował już z usługami gier? Jak zacząć, jeśli nie mogę korzystać z BaseGameActivity?

+0

Próbuję znaleźć dokumentację turowego multiplayera, ale nie mogłem go już znaleźć! Jestem pewien, że było to razem z dokumentacją czasu rzeczywistego, ale teraz wygląda na to, że Google go usunął! Czy wiesz, gdzie ją znaleźć? – thiagolr

Odpowiedz

22

Jednym z powodów, dla których napisaliśmy wszystkie próbki usług gier Google Play w grach z jedną aktywnością, jest to, że przełączanie się między działaniami wymaga odłączenia od GryClient i połącz nowy z nowym działaniem.

Używanie fragmentów jest prawdopodobnie najłatwiejszym sposobem na rozwiązanie tego problemu. Jest również całkiem czysty i pozwala na układanie tabletu, łącząc je, jeśli chcesz.

W szczególności, jeśli konfigurowania gry wieloosobowej, rozłączenia rozłączy cię z pokoju, więc nie można przełączyć się na inną działalność po rozpoczęciu handshake :-)

+0

Dziękuję bardzo, wspaniale, że mam autorytatywną odpowiedź :) Zdecydowanie są przypadki użycia, w których można przejść na inne działania, np. jeśli masz lobby, w którym gracze się spotykają i rozmawiają na czacie, a jeśli jest ich wystarczająco dużo, możesz przejść do intensywnie korzystającej z zasobów gry. Ale powinno to być możliwe, jeśli włożysz wszystkie usługi Google Play w usługę, z której następnie powiążesz się z Działalności, prawda? – caw

+0

Dokładnie. Jeśli używasz jednego działania tylko po to, aby zebrać graczy i przekazać listę identyfikatorów graczy do drugiej aktywności, wtedy drugie działanie może utworzyć pokój z tymi graczami. Wszystko jest w porządku, o ile nie ma przełącznika aktywności po rozpoczęciu uścisku dłoni multiplayer. –

+0

@Burno Więc na przykład, jeśli jestem w środku gry w szachy, podczas gdy drugi gracz myśli i przed wykonaniem ruchu, jeśli się rozłączę, stracę GamesClienta? Chodzi mi o to, czy istnieje sposób, w jaki ruch przez innego użytkownika zostanie mi powiadomiony, gdy wejdę do trybu online? – raj

1

Dokumentacja wyjaśnia, w jaki sposób korzystać z usług gier bez bazy BaseGameActivity, gdy jest to konieczne.

Na przykład podczas signin:

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

Klikając przycisk Zaloguj powinien zainicjować znak w strumieniu. Jeśli korzystasz z klasy bazowej BaseGameActivity podanej w przykładach, po prostu wywołaj metodę beginUserInitiatedSignIn(). W przeciwnym razie musisz ręcznie wywołać metodę connect() swojego obiektu GamesClient.

Nie wydaje mi się, żeby problem dotyczył konkretnego pytania, cała kontrola jest w Google Play, wystarczy pobrać GameClient i zgodnie z moją wiedzą, połączenie wykonane w jednym działaniu będzie dostępne jeśli uzyskasz do niego dostęp z innej aktywności (ale nie testowałem jeszcze trybu multiplayer).

3

Jestem w trakcie opracowywania gry dla wielu graczy przy użyciu nowych usług gier Google Play. Obejmuje osiągnięcia i tabele wyników wraz z trybem multiplayer.

Po kliknięciu przykładowego projektu przycisku, stwierdziłem, że oni (Google) szeroko stosowali fragmenty i pozostawali w granicach pojedynczego działania. W mojej niestandardowej grze przeskakuję pomiędzy działaniami bez problemu.

Musisz przechowywać kilka obiektów Google Play Game Services, ale usługa może być przesadna, chyba że twoja gra wymaga długiego kodu innego niż UI do wykonania. Z tego, co doświadczyłem, jeśli przełączasz się między działaniami, zachowaj identyfikator pokoju i identyfikatora uczestnika, który jest obecnie zaangażowany w grę.

Ponieważ "części łączące" są bezpaństwowcami, po prostu podłącz ponownie w razie potrzeby. Możesz nawet przekazać identyfikator pokoju/uczestnika do każdego działania za pośrednictwem pakietu Intent (lub użyj podejścia singleton). W ten sposób zaoszczędzisz na żywotności baterii, wydajności itp.

Powiązane problemy