带有AssetManager的Libgdx FreeTypeFontGenerator

Ked*_*edu 7 fonts asset-management libgdx

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

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

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

noo*_*one 11

在这里,您可以阅读有关如何供应自己的信息AssetLoader.

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

manager.setLoader(BitmapFont.class, new MyFreeTypeFontLoader(new InternalFileHandleResolver()));
Run Code Online (Sandbox Code Playgroud)

通过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;
    }

}
Run Code Online (Sandbox Code Playgroud)

更新:

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