2017-09-16 6 views
0

follwing cet exemple de code: https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/extensions/FreeTypeFontLoaderTest.javaException en chargeant la police TTF dans AssetManager

Je suis en train de charger un seul fichier TTF dans le AssetManager avec des paramètres différents et différents noms de fichiers.

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...*/ 
} 

Levez les yeux vers la méthode queueAssets(). Citant le lien au-dessus de moi: "Les noms des polices sont arbitraires et ne pointent pas sur un disque de fichier". J'ai nommé les polices générées "bigFont.ttf" et "smallFont.ttf", mais il ne parvient pas à charger les actifs. Le problème ici ne réside pas sur le mauvais chemin du fichier de la police ttf. J'ai fait usage de

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

au lieu de

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

avant et il semble fonctionner si bien faire ce qui est en contradiction avec la déclaration ci-dessus.

Une exception est levée à la méthode de mise à jour (float delta) alors que game.assetManager.update() est appelée.

Exception:

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

faire le nom du fichier et le chemin sûr de votre fichier est correct du système, fichiers ** d'Android est sensible à la casse ** – Aryan

+0

comme déjà dit le chemin de mon fichier est correct. Je ne demande pas sur stackoverflow si c'est un problème mineur. –

Répondre

0

Il m'a fallu jours pour comprendre le problème, mais voici la réponse pour les personnes qui doivent faire face au même problème:

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

En utilisant la même FreeTypeFontLoaderParameter et changeant est paramètre pour créer une police vous conduira à une exception. Utilisez donc différents FreeTypeFontLoaderParameter afin de créer des polices avec des paramètres différents! Le code correct doit être:.

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