通过将TTF字体加载到AssetManager中,例外



follwing此代码示例:https://github.com/libgdx/libgdx/libgdx/blob/blob/master/master/tests/gdx-tests/gdx-tests/src/com/com/badlogic/gdx/gdx/tests/extss/extensions/freetypefontloadertest.java

我正在尝试将一个单个TTF文件加载到具有不同参数和不同的文件名的AssetManager中。

public class LoadingScreen implements Screen {
    private final GdxAsternets game;
    private float progress;
    public LoadingScreen(final GdxAsternets game){
        this.game = game;
        game.bitmapFont = new BitmapFont(Gdx.files.internal("font/myFont.fnt"));
        queueAssets();
    }
    @Override
    public void show() {
        progress = 0f;
    }
    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(0, 0, 0, 0);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        update(delta);
    }
    private void update(float delta){
        progress = MathUtils.lerp(progress, game.assetManager.getProgress(), 0.1f);
        if(game.assetManager.update() && progress >= game.assetManager.getProgress()- 0.1f){
            game.setScreen(game.menuScreen);
        }
    }
    private void queueAssets(){
        //Fontloader/Filehandler
        FileHandleResolver resolver = new InternalFileHandleResolver();
        game.assetManager.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver));
        game.assetManager.setLoader(BitmapFont.class, ".ttf", new FreetypeFontLoader(resolver));
        //load timer font
        FreetypeFontLoader.FreeTypeFontLoaderParameter smallFontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter();
        smallFontParams.fontFileName = "font/Montserrat-SemiBold.ttf";
        smallFontParams.fontParameters.size = 40;
        game.assetManager.load("smallFont.ttf", BitmapFont.class, smallFontParams);
        //load game msg font
        FreetypeFontLoader.FreeTypeFontLoaderParameter bigFontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter();
        smallFontParams.fontFileName = "font/Montserrat-SemiBold.ttf";
        smallFontParams.fontParameters.size = 85;
        game.assetManager.load("bigFont.ttf", BitmapFont.class, bigFontParams);
    }
    /**Overring methods...*/
}

查找方法 queueassets()。引用我上方的链接:"字体的名称是任意的,并且没有指向文件磁盘" 。我已经命名了生成的字体" bigfont.ttf"one_answers" smallfont.ttf",但无法加载资产。这里的问题不在TTF字体的错误文件路径上。我已经使用

game.assetManager.load("font/Montserrat-SemiBold.ttf", BitmapFont.class, smallFontParams);

而不是

game.assetManager.load("smallFont.ttf", BitmapFont.class, smallFontParams);

之前,它似乎很好地做到了,这与上述语句矛盾。

在更新(float delta)方法上抛出异常,而game.assetmanager.update()被称为

例外:

GdxRuntimeException: com.badlogic.gdx.utils.GdxRuntimeException: Error reading file: null (Internal)
at com.bitbench.asternets.Screen.LoadingScreen.update(LoadingScreen.java:84)
at com.bitbench.asternets.Screen.LoadingScreen.render(LoadingScreen.java:67)

我花了几天的时间来弄清楚这个问题,但这是面临同样问题的人的答案:

    FreetypeFontLoader.FreeTypeFontLoaderParameter smallFontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter();
    smallFontParams.fontFileName = "font/Montserrat-SemiBold.ttf";
    smallFontParams.fontParameters.size = 40;
    game.assetManager.load("smallFont.ttf", BitmapFont.class, smallFontParams);
    FreetypeFontLoader.FreeTypeFontLoaderParameter bigFontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter();
    smallFontParams.fontFileName = "font/Montserrat-SemiBold.ttf";
    smallFontParams.fontParameters.size = 85;
    game.assetManager.load("bigFont.ttf", BitmapFont.class, bigFontParams);

使用相同的freetypefontloaderParameter并更改其参数以创建字体将导致您出现异常。因此,使用不同的freetypefontloaderParameter来创建具有不同参数的字体!正确的代码应为:

    FreetypeFontLoader.FreeTypeFontLoaderParameter smallFontParams = new 
    FreetypeFontLoader.FreeTypeFontLoaderParameter();
    smallFontParams.fontFileName = "font/Montserrat-SemiBold.ttf";
    smallFontParams.fontParameters.size = 40;
    game.assetManager.load("smallFont.ttf", BitmapFont.class, smallFontParams);
    FreetypeFontLoader.FreeTypeFontLoaderParameter bigFontParams = new FreetypeFontLoader.FreeTypeFontLoaderParameter();
    bigFontParams.fontFileName = "font/Montserrat-SemiBold.ttf";
    bigFontParams.fontParameters.size = 85;
    game.assetManager.load("bigFont.ttf", BitmapFont.class, bigFontParams);

最新更新