Libgdx FreeTypeFontGenerator с AssetManager
Я хотел бы использовать asset manager в сочетании с FreeTypeFontGenerator.
Я не хочу загружать файлы fnt, потому что они по-разному отображаются на разных разрешениях экрана. Так что в настоящее время я создаю свои шрифты на лету в каждом актере или экране. Теперь я думаю, что лучше всего сгенерировать шрифты один раз, когда игра запущена, и загрузить их в asset manager. Но AssetManager, похоже, нуждается в имени файла с BitmapFont.параметр класса. То, что я хочу сделать, это создайте 5 различных растровых фонтов и загрузите их в assetmanager, чтобы все мои ресурсы были в одном месте и я мог использовать их повторно. Я мог бы просто создать эти растровые изображения, сохранить их в списке и дать список каждому актеру или экрану, так же, как я делаю с assetmanager, с помощью которого я управляю текстурами и звуком. Но было бы более элегантно иметь все в одном месте, управляющем активами.
Итак, есть ли способ загрузить BitmapFonts, созданные с помощью FreeTypeFontGenerator в управляющий активами?
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!
- FreeTypeFontGeneratorLoader (это то же самое, что и код выше)
- FreeTypeFontLoader
- FreeTypeFontLoaderTest