Libgdx FreeTypeFontGenerator с AssetManager


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

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

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

1 7

1 ответ:

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

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

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!