Search code examples
javaandroidfontslibgdxtruetype

How to load a TrueTypeFont with different parameters? LibGDX


The way I have been doing it so far is copying the same font, saving under another name and loading it with different parameters. I am trying to develop an app in LibGDX and by saving the font as different files takes more memory than necessary. Isn't there a way of loading 1 font multiple times, each time with different parameters?


Solution

  • Take a look of this example, I am creating a list of BitmapFont object having different size by simply changing attributes of FreeTypeFontGenerator.FreeTypeFontParameter.

    public class MainGame extends Game {
    
        SpriteBatch spriteBatch;
        BitmapFont font[];
        OrthographicCamera camera;
    
        @Override
        public void create() {
    
            camera=new OrthographicCamera();
            camera.setToOrtho(false,400,640);
            spriteBatch = new SpriteBatch();
    
            int size[]=new int[]{5,8,10,13,15,20,30,40,50,60};
    
            font=new BitmapFont[size.length];
            FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("BUBBLEGUM.TTF"));
            FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
    
            parameter.color = Color.WHITE;
            parameter.magFilter = Texture.TextureFilter.Linear; // used for resizing quality
            parameter.minFilter = Texture.TextureFilter.Linear;
    
            for(int i=0;i<size.length;i++){
                parameter.size=size[i];
                font[i]=generator.generateFont(parameter);
                font[i].getRegion().getTexture().setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear);
                font[i].setColor(1.0f, 0.0f, 0.0f, 1.0f);
            }
    
            generator.dispose();   // Don't forget to dispose
        }
    
        @Override
        public void render() {
    
            Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
            Gdx.gl.glClearColor(1,1,0,1);
    
            spriteBatch.setProjectionMatrix(camera.combined);
            spriteBatch.begin();
            for (int i=0;i<font.length;i++)
               font[i].draw(spriteBatch,"LIBGDX FONT",10,100+i*55);
            spriteBatch.end();
        }
    
        @Override
        public void resize(int width, int height) {
             camera.setToOrtho(false,width,height);
        }
    
        @Override
        public void dispose() {
             spriteBatch.dispose();
             for(BitmapFont bmfont:font)
                  bmfont.dispose();
    
        }
    }
    

    EDIT

    https://github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/badlogic/gdx/tests/extensions/FreeTypeFontLoaderTest.java