【问题标题】:TextureAtlas and Skin libgdxTextureAtlas 和皮肤 libgdx
【发布时间】:2015-12-03 21:44:05
【问题描述】:

我愿意充分利用 Libgdx 中的 AssetManager 及其所有加载器。 但是我很难理解 Skin 和 TextureAtlas 之间的这种特殊联系。

我想尽可能使用 JSON 的方式来创建皮肤。

在 wiki 我可以读到这个:

请注意,JSON 不描述纹理区域、九块分割或来自纹理图集的其他信息

在 SkinLoader 页面中,我读到了这个:

用于皮肤实例的 AssetLoader。 (1)所有 Texture 和 BitmapFont 实例将作为依赖项加载。传递 SkinLoader.SkinParameter 允许指定与皮肤关联的纹理的(2)确切名称。否则,就像调用 (3)Skin.Skin(com.badlogic.gdx.files.FileHandle) 一样查找皮肤纹理。 SkinLoader.SkinParameter 还允许设置命名资源,这些资源将在加载 json 文件之前添加到皮肤中,这意味着可以从 json 文件本身内部引用它们。这对于动态资源很有用,例如通过 FreeTypeFontGenerator 生成的 BitmapFont。

这就是我读到这篇文章时的想法。

(1) 所有纹理。他们使用复数,所以我猜他们是在提到我可能需要按钮的纹理(作为可绘制对象)。

(2) 纹理的确切名称。所以现在,也许他们在谈论TextureAtlas,因为SkinParameter只有两个字段resources和textureAtlasPath。

(3) 这似乎证实了(2)

所以如果我理解的话,如果我想使用这种方法来加载我的皮肤,我必须使用 TexturePacker 和 TextureAtlas。

您能否确认我理解正确并且没有办法初始化将在我的皮肤中使用的纹理而不使用 TextureAtlas 但使用简单的 png 文件?

如果使用 TexturePacker 创建我的包文件,显然当我对我的一个纹理进行修改时,我将不得不重新打包所有内容,对吧?

【问题讨论】:

    标签: libgdx textures skin texturepacker


    【解决方案1】:

    皮肤确实支持为您的各种可绘制对象使用单独的纹理,但它很笨重,因为这不是任何人都应该做的事情。您可以做的是从您的纹理中创建 TextureRegion 可绘制对象,并在告诉皮肤加载 json 文件之前通过名称将它们注册到皮肤,如下所示:

    TextureRegionDrawable someButtonImage = new TextureRegionDrawable(
        new TextureRegion(someButtonTextureThatIsAlreadyLoaded));
    Skin skin = new Skin(); //don't give it a json file yet
    skin.add("someButton", someButtonImage);
    skin.load(Gdx.files.internal("mySkin.json"));
    

    现在您的 Json 可以使用“someButton”作为皮肤中任何可绘制参数的值。

    但是,如果您使用 AssetManager,则只有在您已经在 AssetManager 之外加载了所有必要的纹理时才能执行此操作,因此您可以将它们作为名称映射到 TextureRegionDrawables 传递到 SkinLoader 的 SkinParameter 中。

    无论哪种方式,您都需要输入大量代码来手动加载所有这些纹理,而您可以只使用纹理图集,无论如何它都会表现得更好。如果您担心每次更改皮肤中的图像时都必须这样做,您可以在 IDE 中设置运行配置,以便在每次启动应用时为您打包图集。

    上述所有内容的例外是 BitmapFonts,它不必与其他所有内容属于同一图集,以便您能够纯粹从 Json 加载它们。皮肤将其视为特殊情况。

    无论如何,下面是我如何加载皮肤以及它用来检索其可绘制对象的图集:

    assetManager.load("mySkin.json", Skin.class, new SkinLoader.SkinParameter("myAtlas.atlas"));
    

    【讨论】:

    • 嗨,您使用的是Gdx.files.internal...,即使您正在使用assetManager 来加载它?还是我错过了什么?
    • @MrCharli3 你在说什么?我的资产在内部空间。
    猜你喜欢
    • 1970-01-01
    • 2013-04-17
    • 2014-09-11
    • 2014-04-18
    • 2015-12-24
    • 2017-04-27
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多