1

我正在将 libgdx 用于游戏,我希望能够让游戏调用一个update()现在设置为每 15 分钟调用一次的方法。但是,这当然只在游戏本身打开时才有效,并且我希望它在设备开启时能够正常工作。

到目前为止,我知道如何创建 BroadcastReceiver 并使用 AlarmManager 每 15 分钟调用一次,并且我知道如何设置它以在启动时添加我的警报。我唯一要弄清楚的是如何以精确的 15 分钟间隔(即 9:30、9:45 等)进行安排

这是 AndroidApplication 的来源: https ://github.com/libgdx/libgdx/blob/master/backends/gdx-backend-android/src/com/badlogic/gdx/backends/android/AndroidApplication.java

用于启动它的代码是这样的:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration();
    cfg.useGL20 = true;
    cfg.useAccelerometer = false;
    cfg.useCompass = false;

    initialize(new MainClass(), cfg);
}

环顾四周,找不到任何实际引用的方式,MainClass()而无需调用onCreate(). 我假设做这样的事情的最佳方法有一个单独的意图,即update()方法的副本并调用对相同数据的访问,但是我不知道如何在 libgdx 中做到这一点。

4

1 回答 1

0

我认为你试图让你的游戏类做得太多,更不用说当你“警报”触发并且游戏没有运行时这会遇到问题,所以没有任何东西可以接收到 update() 的调用。如果您真正需要的是一种在正在运行的游戏循环之外为您的游戏定期更新一些数据的方法,我会这样处理它:

  1. 像你一样创建你的 AlarmManager,但不要尝试进入你现有的游戏类并调用更新,只需将更新存储到 SharedStorage 位置。{Android 文档}

  2. 在定义 StoredDataReader 的核心项目中创建一个新接口。

  3. 在您的 android 项目中创建一个名为 AndroidStoredDataReader 的新类,该类实现 StoredDataReader,并且知道如何从存储的更新位置读取。

  4. 重载 MainClass() 构造函数以接收“StoredDataReader”实例。

  5. 在您的 onCreate() 方法中,然后构建您的 AndroidStoredDataReader 类,然后将其传递给您的新 MainClass() 调用。

  6. 在游戏的更新/渲染循环中,您将向 StoredDataReader 询问所需的数据。

如果您将应用程序移植到 GWT 或桌面,这也将允许您采用相同的方法,您可以在其中为每个平台实现 StoredDataReader。(GWTStoredData 读取器可能从浏览器 localStorage 读取,桌面版本可能从本地文件读取,等等)

于 2013-10-01T20:38:33.300 回答