2017-09-16 87 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);