Libgdx FreeTypeFontGenerator с AssetManager

Я хотел бы использовать asset manager в сочетании с FreeTypeFontGenerator.

Я не хочу, чтобы загрузить фнт файлы, потому что они отображают по-разному на разных screenresolutions. Так что в настоящее время я создаю свои шрифты на лету в каждом актере или экране. Теперь я думаю, что лучше всего сгенерировать шрифты один раз при запуске игры и загрузить их в asset manager. Но AssetManager, похоже, нуждается в имени файла с BitmapFont.параметр класса. Что я хочу сделать генерирует 5 различных bitmapfonts и загружает эти BitmapFonts в assetmanager, поэтому у меня есть все мои ресурсы в одном месте и может их повторно использовать. Я мог бы просто создать эти BitmapFonts, сохранить их в списке и дать список каждому актеру или экрану, так же, как я делаю с assetmanager, с которым я управляю текстурами и аудио. Но было бы более элегантно иметь все в одном месте, управляющего активами.

Итак, есть ли способ загрузить BitmapFonts, созданные с помощью FreeTypeFontGenerator в assetmanager?

1 ответов


здесь вы можете прочитать о том, как поставить свой собственный AssetLoader.

вам придется реализовать либо SynchronousAssetLoader или AsynchronousAssetLoader. Это приведет файл к свободному шрифту. С помощью этого вы можете использовать генератор для генерации желаемого BitmapFont. Поскольку вы хотите использовать asset manager, вы должны перезаписать загрузчик по умолчанию для растровых шрифтов, таких как:

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

Via 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!