2016-10-23 26 views
1

如果我有一個bitmapfont,如;如何獲得bitmapfont的自然字體大小?

fonttexture = new Texture(Gdx.files.internal("data/fonttest.png"), true); 
font= new BitmapFont(Gdx.files.internal("data/fonttest.fnt"), 
        new TextureRegion(fonttexture), true); 

是否有可能檢索或推斷在關聯的png紋理文件上使用的自然字體大小? * .fnt文件本身在第一行指定了它;

info face="Calibri Light" size=32 bold=0 italic=0 charset="" 

它是我之後的代碼。 我無法在BitmapFonts類中看到直接獲取它的方法,但有可能獲得各種其他與高度相關的屬性。

我試圖從這些重新創建大小,但沒有太多的運氣。

float baseToAssent = font.getCapHeight()+font.getAscent(); 
float baseToDecent = -font.getDescent();Decent);    
float fontHeight = baseToAssent+baseToDecent; //too small, like 11 not 32 

不是一個fonttographer? fontophile?...嗯...平面設計師,我可能把這些作品拼湊在一起,或者只是缺少一個。

無論哪種情況,找出fonttest.png中使用的字體大小的任何方法都會有幫助。

感謝

USECASE;

我手動將該紋理與距離場着色器一起使用。瞭解紋理自然字體大小對於準確地縮放文本和lineheight以適應任何請求的字體大小是有用的,而無需調整圖像大小,從而降低質量。

回答

0

不知道如何獲得字號具體,但是你可以很容易地使用GlyphLayout得到一個字體的字符串寬度和高度,像這樣:

BitmapFont font = new BitmapFont(Gdx.files.internal("data/fonttest.fnt", false); 

    GlyphLayout glyph = new GlyphLayout(font, "TextMessage"); 
    float width = glyph.width; 
    float height = glyph.height; 

,如果你想了解更多請閱讀本topic關於GlyphLayout和BitmapFont。 與你的一樣,用32px字體進行了相當多的實驗。字符串「W」似乎是29px的寬度,這是我能找到的最寬的,所以如果要存檔的文件大小完全一致,那肯定是不準確的。

你可以做一個有點詭計的方法,將.fnt文件作爲文本文件讀取,並在「size =」後面查找整數,與properties文件工作非常相似,但效率較低,但會返回確切值。

+0

確實。我最初也嘗試過類似的結果。由於我會重複使用這些代碼,所以我想盡可能準確,所以我可能不得不採取哈希方法。 – darkflame

+0

挖一點點,在BitmapFont中找到'getLineHeight()',它返回「行高,這是從一行文本到下一行的距離」。 32px字體的結果是32.而在16px中,我得到了16個。 – Squiddie

+0

是的,這似乎工作。儘管如此,儘可能小心使用它(我也可以)調整lineheight。因此,只有在沒有改變的情況下,這些值才能正確。我的(hackish)解決方案因此保留了字體的hasmap和它們的原始大小。 – darkflame

相關問題