2013-05-24 17 views
16

Nel mio gioco Android ho un multiplayer a turni. Gli utenti attendono gli avversari nella lobby e ogni volta che vengono abbinati esattamente 3, vanno in una nuova sala da gioco insieme, che è un'altra attività rispetto alla lobby.Multigiocatore di Google Play Servizi di gioco con cambio di attività

I documenti suggeriscono di consentire alle attività di estendere BaseGameActivity. Ma mentre cambio l'attività mentre i giocatori sono già connessi, non è necessario posizionare le parti di connettività in un servizio a cui poi si lega la mia attività?

Qualcuno ha già provato con i servizi di gioco? Come iniziare se non riesco a utilizzare BaseGameActivity?

+0

Sto cercando di trovare la documentazione per il multiplayer a turni, ma non riuscivo più a trovarla! Sono abbastanza sicuro che fosse insieme alla documentazione in tempo reale, ma ora sembra che Google lo abbia rimosso! Sai dove trovarlo? – thiagolr

risposta

22

Quindi, uno dei motivi per cui abbiamo scritto tutti gli esempi dei servizi di giochi di Google Play come giochi a singola attività è perché il passaggio da un'attività richiede la disconnessione dal GamesClient e connetterne uno nuovo dalla nuova attività.

Quindi usare Fragments è probabilmente il modo più semplice per farlo. È anche abbastanza pulito e ti consente di creare un layout per tablet combinandoli se lo desideri.

In particolare, se si sta configurando un gioco multiplayer, sezionatore necessario scollegare voi dalla camera, quindi non è possibile passare a una diversa attività dopo l'inizio della stretta di mano :-)

+0

Grazie mille, ottimo per avere una risposta autorevole :) Ci sono sicuramente casi d'uso in cui devi passare tra le Attività, ad es. se hai una lobby dove i giocatori si incontrano e chattano, e se ci sono abbastanza partecipanti, vai all'attività di gioco ad alta intensità di risorse. Ma ciò dovrebbe essere possibile se metti tutti i materiali di Google Play Services in un servizio a cui poi ti colleghi da Attività, giusto? – caw

+0

Esattamente. Se si utilizza una sola attività per raccogliere attorno ai giocatori e passare un elenco di ID giocatore alla seconda attività, la seconda attività può creare la stanza con quei giocatori. Va tutto bene fino a quando non viene attivato alcun interruttore di attività dopo l'avvio dell'handsha multiplayer. –

+0

@Burno Quindi, ad esempio, se sono nel mezzo di una partita a scacchi, mentre l'altro giocatore sta pensando e prima di fare una mossa, se mi disconnetto, perdo il GamesClient? Voglio dire, c'è un modo in cui la mossa di un altro utente mi viene notificata quando arrivo online? – raj

1

La documentazione spiega come utilizzare i Servizi di gioco senza BaseGameActivity ogni volta che è necessario.

Per esempio, durante signin:

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

Facendo clic sul pulsante Accedi dovrebbero avviare il segno del flusso. Se si utilizza la classe base BaseGameActivity fornita negli esempi, è sufficiente chiamare il metodo beginUserInitiatedSignIn(). Altrimenti, devi chiamare manualmente il metodo connect() del tuo oggetto GamesClient.

Per la tua domanda specifica, non penso che sia un problema, tutto il controllo è all'interno di Google Play, devi solo ottenere il GamesClient e per quanto ho capito, la connessione effettuata su una attività sarà lì se accedete da un'altra attività (ma non ho ancora provato il multiplayer).

3

Sono in procinto di sviluppare un gioco multiplayer utilizzando questi nuovi servizi di giochi di Google Play. Include obiettivi e classifiche, oltre al multiplayer.

Dal progetto di esempio del clic sul pulsante, ho scoperto che essi (Google) utilizzavano ampiamente i frammenti e rimanevano entro i limiti di una singola attività. Nel mio gioco personalizzato, salto tra le attività senza problemi.

È necessario mantenere alcune parti degli oggetti dei servizi di giochi di Google Play in giro, ma un servizio potrebbe essere eccessivo, a meno che il gioco non richieda l'esecuzione di codice non UI di lunga durata. Da quello che ho sperimentato, se passi da una attività all'altra, ti consigliamo di mantenere l'id delle Room e degli ID dei partecipanti che sono attualmente coinvolti nel gioco.

Poiché le "parti di connettività" sono senza stato, è sufficiente riconnettersi secondo necessità. È anche possibile passare gli ID stanza/partecipante in ogni attività tramite il pacchetto Intento (o utilizzare l'approccio del modello Singleton). In questo modo risparmierai la durata della batteria, le prestazioni, ecc.