纹理LAS和皮肤libgdx

纹理LAS和皮肤libgdx,libgdx,textures,skin,texturepacker,Libgdx,Textures,Skin,Texturepacker,我愿意充分利用Libgdx及其所有加载程序中的AssetManager。 但我很难理解皮肤和纹理之间如此特殊的联系 我希望尽可能多地使用JSON方法创建皮肤 在wiki中,我可以阅读以下内容: 注意,JSON没有描述纹理区域、ninepatche分割或来自纹理图集的其他信息 在SkinLoader页面中,我读到: 皮肤实例的AssetLoader(1)所有纹理和位图字体实例都将作为依赖项加载。传递SkinLoader.SkinParameter允许指定与皮肤关联的纹理的确切名称。否则会像调用(3

我愿意充分利用Libgdx及其所有加载程序中的AssetManager。 但我很难理解皮肤和纹理之间如此特殊的联系

我希望尽可能多地使用JSON方法创建皮肤

在wiki中,我可以阅读以下内容:

注意,JSON没有描述纹理区域、ninepatche分割或来自纹理图集的其他信息

在SkinLoader页面中,我读到:

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

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

(1) 所有纹理。他们使用复数,所以我猜他们提到的纹理(作为可绘制的),我可能需要一个按钮,例如

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

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

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

你能确认我正确理解了这一点吗?没有TextureAtlas,只有简单的png文件,我的皮肤将无法初始化纹理


如果使用TexturePacker创建我的打包文件,显然,当我修改我的一个纹理时,我必须重新打包所有内容,对吗?

Skin确实支持对各种绘图使用单独的纹理,但它很笨重,因为它不是任何人都应该做的事情。您可以做的是从纹理中创建TextureRegion Drawable,并在告诉皮肤加载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之外加载了所有必需的纹理时,才能执行此操作,因此您可以将它们作为名称到TextureRegionRawables的映射传递到SkinLoader的SkinParameter中

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

上述所有内容的例外是BitmapFonts,它不必与其他所有内容属于同一个atlas,您就可以完全从Json加载它们。Skin将其视为特例

无论如何,下面是我如何加载我的皮肤以及它用来检索其可绘制内容的atlas:

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

您好,您正在使用
Gdx.files.internal…
,即使您正在使用assetManager加载它?还是我遗漏了什么?@Charli3先生,你是什么意思?我的资产在内部空间。