5

好吧,我正在android中实现新的游戏中心,有一个我不明白的概念。

我有一个扩展 BaseGameActivity 的类(https://developers.google.com/games/services/android/init),所以它是管理成就、排行榜、Google + 登录等的类。我需要另一个类能够从该活动访问游戏中心数据(解锁成就、排行榜等),但该类不是从扩展 BaseGameActivity 类中调用的。

他们如何沟通?

结构是这样的(意思是“->”它开始其他活动)

A(扩展 BaseGameActivity)-> B -> C(需要游戏中心与 A 通信)

我已经阅读了谷歌的示例(TypeANumber),但它使用监听器进行通信,当您需要与之通信的课程是您要开始的课程时,这很容易,但我的结构并不容易。

有任何想法吗?

谢谢

4

4 回答 4

5

我认为你有3个选择:

  1. 为每个需要它的 Activity 创建一个 GamesClient,但是您必须为每个 Activity 调用 connect(),这需要时间。第一次连接后,其他的都快很多(几百毫秒)
  2. 创建您自己的应用程序类并将其用作 GamesClient.Builder 的上下文,并将您的 GamesClient 对象存储在您的应用程序类中。我已经测试过了,它可以工作。现在,我知道不鼓励这样做(因为它违反了 Android 理念),但似乎很多人更喜欢创建自己的应用程序类并将数据存储到其中,而不是捆绑数据并将它们从一个活动传递到另一个活动。它的主要优点是您不必修改很多东西以使其适用于您的情况(和我的情况)。
  3. 使用 Fragment 类而不是 Activity 类并使用拥有 GamesClient 对象的主 Activity(在这种情况下,您的 C 类将能够与 A 类通信)。就像您提到的示例一样,只有一个 Activity 继承自 Google 示例的 BaseGameActivity (其中包含 GamesClient 实例),其余的只是 Fragment 类(每个 Fragment 都是一个屏幕)。
于 2013-05-20T18:18:23.447 回答
1

在游戏的多个屏幕之间共享 GamesClient 最直接的方法是使用片段,我试图在 TypeANumber 示例中说明这一点。

也就是说,如果您仍想拥有多个活动,则每个活动都必须管理自己的GamesClient 对象,因为 GamesClient 与特定的活动相关联。因此,如果您使用示例代码,那么每个 Activity 都必须从 BaseGameActivity 派生,并且每个 Activity 都将获得 onSignInSucceeded()。在它们中的每一个中,您都可以使用 getGamesClient() 来获取该 Activity 的 GamesClient对象

于 2013-05-20T19:55:59.987 回答
0

如何将所有需要共享的数据封装到一个单例对象中,例如

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

然后您的应用程序的所有部分都可以通过 SharedData.globalInstance 访问。

于 2013-05-20T15:02:44.587 回答
0

只是想法......我没有看过代码所以用一点盐来对待这个......

你能封装在一个可包裹/可序列化的包裹内,然后在每个需要它的活动中使用 set/getparceable 吗?我建议向下传递一个接口,但如果不看代码就不确定这有多容易

或者,您可以将游戏客户端逻辑包装在可以与每个活动进行交互的服务中吗?

于 2013-05-21T00:05:50.667 回答