2017-09-16 88 views
0

Follwing此代码例如:https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/extensions/FreeTypeFontLoaderTest.java异常通过加载TTF字体到AssetManager

我试图一个单一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”和“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) 
+0

确保文件名和路径的文件是正确的,**的Android的文件系统是大小写敏感的** – Aryan

+0

前面已经说了我的文件的路径是正确的。如果它是一个小问题,我不会问stackoverflow。 –

回答

0

我用了几天要弄清楚这个问题,但这里的人谁也面临同样的问题的答案:

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