2017-08-05 140 views
0

首先,我將皮膚作爲json文件加載。在文件中,我放置了兩個BitmapFont定義(「font」和「big-font」),並將它們留在空白處(我加載了一個虛擬「.fnt」文件以防止解析器投訴)。以編程方式更改字體時Libgdx皮膚未更新

//start font generator 
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/button-font.ttf")); 
FreeTypeFontGenerator.FreeTypeFontParameter parameters = new FreeTypeFontGenerator.FreeTypeFontParameter(); 

//default font (the sizes are arbitrary, since it did not work...) 
parameters.size = 10; 
BitmapFont defaultFont = generator.generateFont(parameters); 

//big font 
parameters.size = 100; 
BitmapFont bigFont = generator.generateFont(parameters); 

並將它們設置爲皮膚的字體,像這樣:然後我用下面的代碼生成的兩個FreeType字體爲

skin.add("font", defaultFont, BitmapFont.class); 
skin.add("big-font", bigFont, BitmapFont.class); 

的問題是,在GUI(特別是TEXT按鈕,它採用了「字體「字體)似乎不關心我以編程方式做了什麼,並繼續使用我在json文件中設置的虛擬字體。

我在做什麼錯?有沒有更好的方式來整合ttf字體和json皮膚分析?

在此先感謝您的幫助。

回答

1

遵循以下步驟:

  1. 首先,從TTF文件

    FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("fonts/button-font.ttf")); 
    FreeTypeFontParameter parameter = new FreeTypeFontParameter(); 
    parameter.size = 10; 
    BitmapFont defaultFont = generator.generateFont(parameter); 
    generator.dispose(); // don't forget to dispose to avoid memory leaks! 
    
  2. 創建您的字體使用默認的構造函數創建一個空白的皮膚和你的字體添加到皮膚。

    Skin skin = new Skin(); 
    skin.add("font",defaultFont); 
    
  3. 您的地圖集文件添加到您的皮膚。

    skin.addRegion(new TextureAtlas(Gdx.files.internal("mySkin.atlas"))); 
    
  4. 將你的Json文件加載到你的皮膚上。

    skin.load(Gdx.files.internal("mySkin.json")); 
    
  5. 然後,在你的JSON文件,你可以參考「字體」

    { 
        font: font 
    }