5

さて、Androidで新しいゲームセンターを実装していますが、理解できない概念があります。

私は BaseGameActivity ( https://developers.google.com/games/services/android/init ) を拡張するクラスを持っているので、実績、リーダーボード、Google + サインインなどを管理するクラスです。別のクラスが必要です。そのアクティビティからゲームセンターのデータにアクセスできます (実績、リーダーボードなどのロックを解除します) が、このクラスは拡張 BaseGameActivity クラスから呼び出されません。

彼らはどのようにコミュニケーションをとることができますか?

構造はこんな感じ(「→」で別の活動を開始するという意味)

A (BaseGameActivity を拡張) -> B -> C (A とのゲーム センター通信が必要)

Google の例 (TypeANumber) を読みましたが、リスナーを使用して通信します。通信する必要があるクラスが開始するクラスである場合は簡単ですが、私の構造では簡単ではありません。

何か案は?

ありがとう

4

4 に答える 4

5

私が思うには、あなたには3つの選択肢があります:

  1. 必要なアクティビティごとに GamesClient を作成しますが、アクティビティごとに connect() を呼び出す必要があり、時間がかかります。最初の接続後、他の接続ははるかに高速です (数百ミリ秒)
  2. 独自の Application クラスを作成し、それを GamesClient.Builder のコンテキストとして使用して、GamesClient オブジェクトを Application クラスに格納します。私はそれをテストしました、そしてそれは動作します。これはお勧めできませんが (Android の哲学に反するため)、データをまとめてアクティビティ間で渡すよりも、独自のアプリケーション クラスを作成してそこにデータを格納することを好む人が多いようです。その主な利点は、あなたのケース (および私のケース) で機能させるために多くのことを変更する必要がないことです。
  3. Activity クラスの代わりに Fragment クラスを使用し、GamesClient オブジェクトを所有するメインの Activity を使用します (この場合、クラス C はクラス A と通信できます)。あなたが言及している例のように、Googleの例のBaseGameActivity(GamesClientインスタンスを含む)から継承するActivityは1つだけで、残りはFragmentクラスです(各Fragmentは画面です)。
于 2013-05-20T18:18:23.447 に答える
1

ゲーム内の複数の画面間で GamesClient を共有する最も簡単な方法は、Fragments を使用することです。これについては、TypeANumber サンプルで説明しようとしました。

ただし、それでも複数のアクティビティが必要な場合は、GamesClient が特定のアクティビティに関連付けられているため、各アクティビティは独自のGamesClient オブジェクトを管理する必要があります。したがって、サンプル コードを使用している場合、各アクティビティは BaseGameActivity から派生する必要があり、それぞれが onSignInSucceeded() を取得します。それぞれで、 getGamesClient() を使用して、そのアクティビティの GamesClient オブジェクトを取得できます。

于 2013-05-20T19:55:59.987 に答える
0

ただのアイデア...私はコードを見ていないので、これを少しの塩で扱ってください..

parcelable/serializable 内にカプセル化し、それを必要とする各アクティビティで set/getparceable を使用できますか? インターフェイスを下に渡すことをお勧めしますが、コードを見ずにそれがどれほど簡単かはわかりません

または、各アクティビティから操作できるサービスにゲーム クライアント ロジックをラップできますか?

于 2013-05-21T00:05:50.667 に答える
0

共有する必要があるすべてのデータをシングルトン オブジェクトにカプセル化するのはどうでしょうか。

class SharedData {
    public String aString;
    public double aDouble;
    // etc
    public static SharedData globalInstance = new SharedData();
}

その後、アプリのすべての部分が SharedData.globalInstance 経由でアクセスできるようになります。

于 2013-05-20T15:02:44.587 に答える