2013-05-24 9 views
16

In meinem Android-Spiel habe ich einen rundenbasierten Multiplayer. Die Nutzer warten auf Gegner in der Lobby und wenn genau drei übereinstimmen, gehen sie zusammen in ein neues Spielzimmer, was eine andere Aktivität als die Lobby ist.Google Play Game-Dienste Multiplayer mit Aktivität wechseln

Die Dokumente schlagen vor, die Aktivitäten BaseGameActivity zu erweitern. Aber wenn ich die Aktivität wechsle, während die Spieler bereits verbunden sind, muss ich die Konnektivitätsteile in einen Dienst legen, an den meine Aktivität dann bindet?

Hat jemand schon mit Game Services versucht? Wie beginne ich, wenn ich BaseGameActivity nicht benutzen kann?

+0

Ich versuche zu finden die Dokumentation für den rundenbasierten Multiplayer, aber ich konnte es nicht mehr finden! Ich bin mir ziemlich sicher, dass es zusammen mit der Echtzeit-Dokumentation war, aber jetzt scheint es, dass Google es entfernt hat! Weißt du, wo du es findest? – thiagolr

Antwort

22

Einer der Gründe, warum wir alle Google Play-Spiele-Beispiele als Single-Activity-Spiele geschrieben haben, ist, dass Sie zwischen den Aktivitäten trennen müssen GamesClient und verbinden Sie einen neuen von der neuen Aktivität.

Die Verwendung von Fragments ist wahrscheinlich der einfachste Weg, dies zu tun. Es ist auch ziemlich sauber und ermöglicht es Ihnen, ein Tablet-Layout zu erstellen, indem Sie sie kombinieren, wenn Sie möchten.

Insbesondere wenn Sie ein Multiplayer-Spiel einrichten, Trennen werden Sie aus dem Raum trennen, so dass Sie nicht :-) zu einer anderen Aktivität nach dem Start des Handshake wechseln

+0

Vielen Dank, großartig, um eine autoritative Antwort zu haben :) Es gibt definitiv Anwendungsfälle, in denen Sie _have_ zwischen Aktivitäten, z. Wenn Sie eine Lobby haben, in der sich Spieler treffen und sich unterhalten, und wenn genug Teilnehmer da sind, gehen Sie zum ressourcenintensiven Spiel Activity. Aber das sollte möglich sein, wenn Sie alle Google Play Services-Inhalte in einen Dienst einfügen, an den Sie dann über die Aktivitäten gebunden sind, oder? – caw

+0

Genau. Wenn Sie eine Aktivität nur zum Sammeln von Spielern und zum Weitergeben einer Liste von Spieler-IDs an die zweite Aktivität verwenden, kann die zweite Aktivität den Raum mit diesen Spielern erstellen. Es ist alles in Ordnung, solange es keinen Aktivitätsschalter nach dem Multiplayer-Handshake gibt. –

+0

@Burno So, zum Beispiel, wenn ich mitten in einem Schachspiel bin, während der andere Spieler denkt und bevor ich einen Zug mache, wenn ich getrennt werde, dann verliere ich den GamesClient? Ich meine, gibt es eine Möglichkeit, dass der Umzug durch den anderen Benutzer benachrichtigt wird, wenn ich online gehe? – raj

1

In der Dokumentation wird erklärt, wie Sie die Game Services ohne die BaseGameActivity verwenden können, wann immer sie benötigt werden.

Zum Beispiel während signin:

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

der Zeichen in Schaltfläche klicken, sollte das Zeichen in Fluss einzuleiten. Wenn Sie die BaseGameActivity-Basisklasse in den Beispielen verwenden, rufen Sie einfach die beginUserInitiatedSignIn() -Methode auf. Andernfalls müssen Sie die Methode connect() Ihres GamesClient-Objekts manuell aufrufen.

Für Ihre spezielle Frage, ich glaube nicht, dass es ein Problem ist, die ganze Kontrolle ist in Google Play, Sie müssen nur den GamesClient und soweit ich verstanden habe, die Verbindung zu einer Aktivität wird da sein wenn du von einer anderen Aktivität darauf zugreifst (aber ich habe den Multiplayer noch nicht getestet).

3

Ich bin dabei, ein Multiplayer-Spiel mit diesen neuen Google Play-Spieldiensten zu entwickeln. Es enthält Errungenschaften und Ranglisten sowie Multiplayer.

Von der Schaltfläche klicken Beispielprojekt, fand ich, dass sie (Google) Fragmente ausgiebig verwendet, und blieb innerhalb der Grenzen einer einzelnen Aktivität. In meinem benutzerdefinierten Spiel spring ich zwischen den Aktivitäten ohne Probleme.

Sie müssen ein paar Teile von Google Play-Spieldienste-Objekten aufbewahren, aber ein Dienst ist möglicherweise übertrieben, es sei denn, Ihr Spiel benötigt einen lang laufenden Nicht-UI-Code. Nach dem, was ich erlebt habe, wenn du zwischen den Aktivitäten wechselst, solltest du die ID der Zimmer und Teilnehmer-IDs behalten, die derzeit am Spiel beteiligt sind.

Da die "Connectivity Parts" zustandslos sind, verbinden Sie sie einfach wie benötigt. Sie können sogar die Raum-/Teilnehmer-IDs über das Intent-Bündel an jede Aktivität übergeben (oder den Singleton-Muster-Ansatz verwenden). Auf diese Weise sparen Sie Akkulaufzeit, Leistung, etc.

Verwandte Themen