2013-05-24 16 views
16

私のAndroidゲームでは、ターンベースのマルチプレイヤーがあります。ユーザーはロビー内の相手を待っていて、正確に3つが一致すると、一緒に新しいゲームルームに行きます。これはロビーよりも別のアクティビティです。Google Playゲームサービスマルチプレイヤーアクティビティ切り替え

ドキュメントでは、アクティビティでBaseGameActivityを拡張することを推奨しています。しかし、プレイヤーが既に接続されている状態でアクティビティを切り替えると、アクティビティがバインドされるサービスに接続部分を配置する必要はありませんか?

ゲームサービスで既に試したことがありますか? BaseGameActivityを使用できない場合の開始方法

+0

:-)ハンドシェイクを開始した後、別の活動に切り替えることはできませんので、特に

は、切断は、部屋からあなたを切り離しますターンベースのマルチプレイヤーのためのドキュメンテーション、しかし私はもうそれを見つけることができませんでした!私はそれがリアルタイムのドキュメンテーションと一緒だったと確信していますが、今はGoogleがそれを削除したようです!あなたはそれを見つける場所を知っていますか? – thiagolr

答えて

22

Google Playのゲームサービスのサンプルをすべてシングルアクティビティゲームとした理由の1つは、アクティビティを切り替える際に、 GamesClientを開き、新しいアクティビティから新しいものを接続します。

このようにするには、フラグメントを使用するのが最も簡単な方法でしょう。それはまたきれいで、あなたが望むならそれらを組み合わせてタブレットレイアウトを作ることを可能にします。あなたがマルチプレイヤーゲームを設定している場合は、私が見つけようとしている

+0

ありがとう、権威のある回答を得るのは素晴らしいです:)アクティビティ間を切り替えるには、間違いなく使用例があります。プレイヤーが出会ってチャットするロビーがあり、十分な参加者がいる場合は、リソース集約型のゲームアクティビティに移動します。しかし、これは、すべてのGoogle Playサービスのサービスを、アクティビティからバインドしたサービスに入れると可能でしょうか? – caw

+0

正確に。 1つのアクティビティを使用してプレーヤーの周りに集まり、プレーヤーIDのリストを2番目のアクティビティに渡すと、2番目のアクティビティはそのプレイヤーと一緒に部屋を作成できます。マルチプレイヤーハンドシェイクが開始された後、アクティビティスイッチがない限り、すべて問題ありません。 –

+0

@Burnoだから、もし私がチェスゲームの途中にいて、他のプレイヤーが考えていて、動かす前に、私が切断されたら、私はGamesClientを失うでしょうか? 私は、オンラインになると、他のユーザーの移動が私に通知される方法がありますか? – raj

1

ドキュメントには、BaseGameActivityを使わずにゲームサービスを使用する方法が説明されています。フローの符号を開始すべきボタンで記号をクリック

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

:サインイン時たとえば

、。サンプルで提供されているBaseGameActivity基底クラスを使用している場合は、単にbeginUserInitiatedSignIn()メソッドを呼び出します。それ以外の場合は、GamesClientオブジェクトのconnect()メソッドを手動で呼び出す必要があります。

あなたの特定の質問については、私はそれが問題ではないと考えています。すべてのコントロールはGoogle Play内にあります。ゲームクライアントを取得するだけで、わかっている限り、1つのアクティビティの接続はそこにあります別のアクティビティからアクセスした場合(ただし、まだマルチプレイヤーはテストしていません)

3

私はこれらの新しいGoogle Playゲームサービスを使用してマルチプレーヤーゲームを開発しています。マルチプレイヤーと一緒に、成果とリーダーボードが含まれています。

ボタンクリックサンプルプロジェクトから、私はそれら(Google)が断片を広範囲に使用し、単一のアクティビティの範囲内に留まっていることがわかりました。私のカスタムゲームでは、私は問題なく活動の間を飛びます。

Google Playゲームサービスオブジェクトのいくつかの部分を残しておく必要がありますが、ゲームで長時間実行される非UIコードを実行する必要がある場合を除き、サービスは過度のものとなる可能性があります。私が経験したことから、アクティビティを切り替えると、現在ゲームに参加しているルームと参加者IDのIDを保持したいことがあります。

「接続部」はステートレスなので、必要に応じて再接続してください。インテントバンドルを介して各アクティビティにルーム/参加者IDを渡すこともできます(またはシングルトンパターンのアプローチを使用することもできます)。この方法では、バッテリーの寿命やパフォーマンスなどを節約できます。