7

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

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

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

4

1 回答 1

11

在这里您可以阅读有关如何提供自己的AssetLoader.

您必须实现 aSynchronousAssetLoader或 a AsynchronousAssetLoader。那些会使文件变成自由类型的字体。有了它,您可以使用生成器来生成您想要的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 字体本身的加载器!

于 2014-06-13T08:08:46.230 回答