2013-05-17 58 views

回答

56

BitmapFont API < 1.5.6

要MESURE您使用Font一個String的寬度,並獲得Stringbounds,你要畫畫。

BitmapFont.getBounds(String str).width 

BitmapFont API

你可以得到高度爲適合繪製過偏移。只需用高度替換寬度即可。

此外,多行文本使用getMultiLineBounds(someString).width來獲得界限。


BitmapFont API> = 1.5.6

BitmapFont API 1.5.7更改,因此有不同的方式來獲得邊界現在:

BitmapFont.TextBounds和getBounds完成。相反,將字符串賦予GlyphLayout並使用其寬度和高度字段獲取邊界。然後,您可以通過將相同的GlyphLayout傳遞給BitmapFont來繪製文本,這意味着不必像過去那樣佈置兩次字形。

Source

例子:

GlyphLayout layout = new GlyphLayout(); //dont do this every frame! Store it as member 
layout.setText("meow"); 
float width = layout.width;// contains the width of the current set text 
float height = layout.height; // contains the height of the current set text 
+0

也可以使用getMultiLineBounds(someString).width爲多行文本。 –

+0

謝謝你!問題已解決 – LeSam

+2

在較新版本的libgdx中不推薦使用它。我無法在API中找到它......他們的另一種方式是做到這一點嗎? –

4

根據@Nates答案:https://stackoverflow.com/a/20759876/619673調用方法

BitmapFont.getBounds(String str).width 

並不總是返回正確的寬度!特別是當你重新使用字體。

font.drawWrapped(spriteBatch, "text", x_pos, y_pos, your_area_for_text, BitmapFont.HAlignment.CENTER); 
0

如果: 如果你想畫例如in the center of part of view port文本,可以通過其他方法

BitmapFont.drawWrapped(...)

示例代碼避免這個問題你在用戶界面中使用皮膚是一個麻煩,找出正確的字體飼料到GlyphLayout。

在這種情況下,我使用標籤的扔掉實例來爲我找出所有東西,然後問標籤的寬度。

Skin skin = getMySkin(); 
Label cellExample = new Label("888.88888", skin); 
cellExample.layout(); 
float cellWidth = cellExample.getWidth(); 

Table table = new Table(skin); 
table.defaults().width(cellWidth); 
// fill table width cells ... 

這不是問題的答案,如果你想給自己定位文本,但它是使一個UI佈局穩定,較少依賴於細胞的實際內容是有用的。

相關問題