【问题标题】:How to build a ResourceManager in libGDX without making the AssetManager static?如何在 libGDX 中构建 ResourceManager 而不使 AssetManager 成为静态?
【发布时间】:2016-07-15 08:44:13
【问题描述】:

自从我开始阅读有关如何在 libGDX 中管理资产以来已经 3 天了。我在文档中读到的第一件事是从不将 AssetManager 或任何纹理设为静态,但到目前为止我看到的所有示例仍然将 AssetManager 设为静态。 有人可以分享一个尚未用作单例的 AssetManager 项目/代码吗? 或者直接告诉我怎么做。

【问题讨论】:

  • 那么,您的问题是如何在面向对象语言中使用普通对象?也许扩展一点,你遇到的实际问题是什么。

标签: libgdx


【解决方案1】:

我曾经在 Main extends Game 类实例中创建 AssetManager 。然后,由于我使用的是Screens,所以我将main 实例传递给构造函数,我可以通过它访问assetManager

    public class MyScreen implements Screen {
        protected Main game;

        public MyScreen (Main game)
        {
            this.game = game;

            game.assetManager.load(...
        }

不知道是不是最好的办法。


如果您不想将 Game 实例传递给屏幕,您可以使用

    Gdx.app.getApplicationListener()

获取您当前的Game 类对象

【讨论】:

  • 这看起来可行。可以分享一下 ScreenManager、AssetManager 和 Main 扩展游戏类的完整植入吗?这将是一个很大的帮助。 :)
【解决方案2】:

我这样做的方法是在我的第一个屏幕(这是一个加载屏幕)中简单地创建 AssetManager 的一个实例,然后通过它们的构造函数在每个屏幕中传递它。

    public class LoadingScreen implements Screen {
    private AssetManager assetManager ; 
    }

    public LoadingScreen(){
    assetManager = new AssetManager ();
    }

    //when going to the next screen, when the assetManager finishes loading:

     ((Game)Gdx.app.getApplicationListener()).setScreen(new NextScreen(assetManager,...));

附录,在你的 NextScreen 类中:

    private AssetManager assetManager;

    public NextScreen (AssetManager assetManager){
    this.assetManager = assetManager;
    }

【讨论】:

  • 在这种情况下,我的每个屏幕都必须有一个单独的 AssetManager,这不是管理资产和屏幕的好方法。
  • 不,一点也不。您始终使用您在开始游戏时创建的相同 AssetManager。您只需在屏幕上传递它。
  • 如何分享代码?在您共享的代码中,您将 AssetManager 定义为私有。
  • 我已将其添加到我的原始答案中(请参阅附录)。您只需使用构造函数来传递对象。所以你真的只为你的整个程序创建了 1 个assetManager。
猜你喜欢
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多