带有AssetManager的Libgdx FreeTypeFontGenerator

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有AssetManager的Libgdx FreeTypeFontGenerator相关的知识,希望对你有一定的参考价值。

我想将资产管理器与FreeTypeFontGenerator结合使用。

我不想加载fnt文件,因为它们在不同的screenresolutions上显示不同。所以我现在所做的是在每个演员或屏幕上动态生成我的字体。现在我认为最好在游戏启动时生成一次字体并将其加载到资产管理器中。但是AssetManager似乎需要一个带有BitmapFont.class参数的文件名。我想要做的是生成5个不同的bitmapfonts并将这些BitmapFonts加载到assetmanager中,所以我将所有的资源都集中在一个地方,并且可以重用它们。我可以创建那些BitmapFonts,将它们保存在列表中,并将列表提供给每个actor或屏幕,就像我使用assetmanager一样管理我的纹理和音频。但是将资源管理器放在一个地方会更优雅。

那么,有没有办法将使用FreeTypeFontGenerator创建的BitmapFonts加载到assetmanager中?

答案

Here你可以阅读有关如何供应自己的AssetLoader

你必须实现SynchronousAssetLoaderAsynchronousAssetLoader。那些会得到一个免费的字体文件。有了它,你可以使用生成器生成你想要的BitmapFont。由于您要使用资产管理器,您必须覆盖位图字体的默认加载器,如下所示:

manager.setLoader(BitmapFont.class, new MyFreeTypeFontLoader(new InternalFileHandleResolver()));

通过AssetLoaderParameters,您可以为您的装载机提供更多信息,例如字体大小。

以下代码未经测试,但可能有效:

public class FreeTypeFontLoader extends SynchronousAssetLoader<BitmapFont, FreeTypeFontLoader.FreeTypeFontParameters> {

    public FreeTypeFontLoader(FileHandleResolver resolver) {
        super(resolver);
    }

    @Override
    public BitmapFont load(AssetManager assetManager, String fileName, FileHandle file, FreeTypeFontParameters parameter) {
        FreeTypeFontGenerator generator = new FreeTypeFontGenerator(file);

        return generator.generateFont(parameter.fontParameters);
    }

    static public class FreeTypeFontParameters extends AssetLoaderParameters<BitmapFont> {

        public FreeTypeFontParameter fontParameters;
    }

    @Override
    public Array<AssetDescriptor> getDependencies(String fileName, FileHandle file, FreeTypeFontParameters parameter) {
        return null;
    }

}

更新:

这不再是必需的,gdx-freetype扩展现在有freetype字体本身的加载器!

以上是关于带有AssetManager的Libgdx FreeTypeFontGenerator的主要内容,如果未能解决你的问题,请参考以下文章

无法在libGDX中将纹理加载到AssetManager

Libgdx之AssetManager 资源管理器及进度条的实现

Libgdx之AssetManager 资源管理器及进度条的实现

LibGDX - 无法加载FreetypeFont资产的依赖项

LibGDX:AudioFlinger 无法创建轨道,状态 -12

如何使用 libgdx 资产管理器正确加载纹理