2017-04-21 37 views
0

到目前爲止,我一直在做的方式是複製相同的字體,以其他名稱保存並用不同的參數加載它。我正試圖在LibGDX中開發一個應用程序,並通過保存字體,因爲不同的文件佔用的內存超過必要的。沒有一種方法可以多次加載1個字體,每次都有不同的參數?如何使用不同參數加載TrueTypeFont? LibGDX

+0

你怎麼通過複製相同的字體是什麼意思?你正在處理BitmapFont'.fnt'文件或'.ttf'文件。 ? – Aryan

+0

.ttf。爲了使用不同參數的字體,我只複製現有的字體,將其粘貼到同一個文件夾下,並使用其他參數加載它 – vladutelu

+0

您可以使用相同的.ttf文件,並通過僅更改FontTypeParameter屬性來生成不同的字體。 – Aryan

回答

0

看一下這個例子,我創建了一個具有不同大小的BitmapFont對象列表,只需更改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(); 

    } 
} 

編輯

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

+0

好的,但如果我使用資產管理器加載字體,我會這樣做嗎? – vladutelu

+0

是的,你可以,最後你有位圖字體,將它加載到AssetManager中。 – Aryan

+0

我正在使用FreeTypeFontLoader加載字體和參數,而不是FreeTypeFontGenerator。我應該改變它嗎?當你從資產管理器加載字體時,它會詢問字體的位置,那麼如何加載相同的字體,但使用不同的參數?對不起,提出這麼多問題,但我很困惑 – vladutelu