带有AssetManager的Libgdx FreeTypeFontGenerator

时间:2014-06-12 23:37:13

标签: fonts libgdx asset-management

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

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

那么,有没有办法将使用FreeTypeFontGenerator创建的BitmapFonts加载到资产管理器中?

1 个答案:

答案 0 :(得分:11)

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

}

UPDATE:

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