【问题标题】:I look for an explanation of libgdx's asset manager我寻找libgdx资产管理器的解释
【发布时间】:2014-03-06 12:01:34
【问题描述】:

我想创建一个资产管理器。我知道“libgdx”的资产管理器,但我不想使用 libgdx,因为我只是为了学习目的而编程。所以我想了解我的整个程序并从头开始编写所有内容。

现在我需要一个资产管理器,因为我的内存不足。我查看了 libgdx 的资产管理器,但它几乎是代码,我并不完全理解它。

我想知道 libgdx 的资产管理器的基本原理/想法是什么。我知道它可以与哈希图一起使用,并且在它自己的线程中是异步的。但这几乎是我所知道的。

你能帮我吗?

【问题讨论】:

    标签: java android libgdx asset-management


    【解决方案1】:

    除了它使用地图来存储和检索所有资产之外,没有什么要了解的了。

    基本上你有这样的东西:

    class AssetManager {
    
        private Map<String, Object> assets = new HashMap<String, Object>();
    
        public void storeAsset(String key, Object asset) {
            assets.put(key, asset);
        }
    
        public <T> T getAsset(String key, Class<T> clazz) {
            return (T) assets.get(key);
        }
    
        public void freeAsset(String key) {
            assets.remove(key);
        }
    }
    

    通用 getter 是可选的,您也可以自己进行转换,但这样更方便。当然有错误处理和所有缺失,但这就是一个非常基本的 AssetManager 可能的工作方式。

    【讨论】:

    • 好的,谢谢你这个简单的例子......关于 libgdx 的 Asset-Manager 的另一个问题。他们使用任务...如果您查看更新方法的代码,您会看到他们调用“nextTask”。他们为什么使用这些任务?
    • 更新方法已经是AssetManager的另一个用途,即资产的加载。我的示例仅用于存储和检索随机资产。但是 LibGDX AssetManager 也有加载功能。这些可以是异步的并在不同的线程中运行。这些线程获得一个任务,描述加载纹理、声音或平铺地图。
    • 好吧,让我总结一些事情,请告诉我是否正确。我们拥有的最简单的可能性是创建一个只有静态成员的类“资产”,例如“公共静态像素图背景”。在我们的加载例程中,我们像这样“Assets.background = game.getGraphics.newPixmap("background.png", PixmapFormat.RGB565)" 加载资源。现在所有资产都已加载,我们可以随时随地使用它们。但是有什么缺点呢?我们运行得非常快,因为无论何时我们想使用特定资产,都必须在开始时加载所有内容。
    • 第二种可能性是使用哈希映射,我们可以在其中添加和删除资产,如上所示。优点是我们不需要太多的内存,因为我们只加载我们需要的东西,我们可以处理我们不再需要的东西。另一方面,它更加灵活。这些基本原则就是你所说的存储和检索。对吗?
    • libgdx 资产管理器以另一种方式进行。首先,您必须使用“加载”方法,然后您必须调用“更新”。我认为这是实现异步所必需的。正确的?之后,您的资产可通过“get”方法获得。如果我看一下“get”方法,我会发现资产基本上存储在一个名为“assets”的哈希映射中。但是当我反过来看“加载”和“更新”方法时,我看不到资产将如何存储在这个哈希图中。在加载时,他们使用一个数组“loadQueue”来获取一个新成员。
    猜你喜欢
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多