Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fonts 带有AssetManager的Libgdx FreeTypeFontGenerator_Fonts_Libgdx_Asset Management - Fatal编程技术网

Fonts 带有AssetManager的Libgdx FreeTypeFontGenerator

Fonts 带有AssetManager的Libgdx FreeTypeFontGenerator,fonts,libgdx,asset-management,Fonts,Libgdx,Asset Management,我想将资产管理器与FreeTypeFontGenerator结合使用 我不想加载fnt文件,因为它们在不同的屏幕分辨率上显示不同。所以我现在做的是在每个演员或屏幕上动态生成我的字体。 现在,我认为最好在游戏开始时生成一次字体,并将其加载到资产管理器中。但是AssetManager似乎需要一个带有BitmapFont.class参数的文件名。我想做的是生成5种不同的bitmapfonts并将这些bitmapfonts加载到assetmanager中,这样我就可以将所有资源放在一个地方,并可以重用它

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

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

那么,有没有办法将使用FreeTypeFontGenerator创建的位图字体加载到assetmanager中?

您可以阅读如何提供自己的字体

您必须实现或。这将使文件成为自由字体。这样,您就可以使用生成器生成所需的
BitmapFont
。由于要使用asset manager,必须覆盖位图字体的默认加载程序,如下所示:

manager.setLoader(BitmapFont.class, new MyFreeTypeFontLoader(new InternalFileHandleResolver()));
通过,您可以向加载程序提供更多信息,如字体大小

以下代码未经测试,但可能有效:

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

}
公共类FreeTypeFontLoader扩展了SynchronousAssetLoader{
公共FreeTypeFontLoader(FileHandlerResolver解析程序){
超级(解析器);
}
@凌驾
公共位图字体加载(AssetManager AssetManager、字符串文件名、文件句柄文件、FreeTypeFontParameters参数){
FreeTypeFontGenerator=新的FreeTypeFontGenerator(文件);
返回生成器.generateFont(参数.fontParameters);
}
静态公共类FreeTypeFontParameters扩展了AssetLoaderParameters{
公共FreeTypeFontParameters;
}
@凌驾
公共数组(与上面的代码相同)

  • Thx。我目前不了解代码中的所有内容,但我喜欢这样做的主要原因是,我可以在pause()方法中使用一个简单的assetmanager.clear()来处理()。现在我不确定如果我实现这个加载程序,assetmanager会处理什么。只知道生成器?仅使用位图字体?或两者都使用?它将处理BitmapFonts。您可能还应该将FreeTypeFontGenerator添加到get依赖项中,以便在处理最后一种位图字体时也会处理它。但是,我认为不可能像这样实际获取BitmapFonts,因为无法指定参数在获取它们时使用。仅在加载时使用。最好实现一个
    FreeTypeFontGeneratorLoader
    来通过资产管理器管理生成器,但是您仍然需要自己处理所有位图字体。可能两者都有可能,但我需要自己在家里尝试,因为现在我正在工作。好的,这是我的工作anks.我想我会在每个演员和屏幕上处理字体,而不是。在assetmanager中持有FreeTypeFontGenerator不会给我带来太多好处,因为我可以在演员中创建位图字体后立即处理它。我的主要目标是在那里保存不同大小的实际位图字体,以便在一个p中重用和处理你能给我一个参考吗?你是在哪里发现LibGDX有装载机的?