2013-05-17 12 views

Odpowiedz

56

BitmapFont API < 1.5.6

Do mesure szerokość String używasz Font i uzyskać bounds o String, będziesz rysować.

BitmapFont.getBounds(String str).width 

BitmapFont API

można uzyskać wysokość do offsetu za prawo do rysowania też. Wystarczy zastąpić szerokość i wysokość.

Dodatkowo dla tekstów wielowierszowych użyj getMultiLineBounds(someString).width, aby uzyskać ograniczenia.


BitmapFont API> = 1.5.6

BitmapFont API zmienione w 1.5.7 więc istnieje inny sposób, aby uzyskać granice teraz:

BitmapFont.TextBounds i getBounds są gotowe. Zamiast tego podaj ciąg GlyphLayout i uzyskaj granice, używając pól szerokości i wysokości. Następnie możesz narysować tekst, przekazując ten sam GlyphLayout do BitmapFont, co oznacza, że ​​glify nie muszą być układane dwukrotnie, tak jak kiedyś.

Source

Przykład:

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

Można również użyć getMultiLineBounds (someString) .width dla wielu tekstów liniowych. –

+0

dziękuję! problem rozwiązany – LeSam

+2

Jest przestarzały w nowszej wersji libgdx. Nie mogę go znaleźć w API .... Czy jest to inny sposób na zrobienie tego? –

4

według @Nates odpowiedź: https://stackoverflow.com/a/20759876/619673 wywołanie metody

BitmapFont.getBounds(String str).width 

nie zawsze zwraca właściwej szerokości! Zwłaszcza, gdy ponownie używasz czcionki. Jeśli chcesz narysować tekst np in the center of part of view port, można uniknąć tego problemu poprzez zastosowanie innej metody

BitmapFont.drawWrapped (...)

Przykładowy kod:

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

If używasz skórek w interfejsie użytkownika, jest to kłopot, aby znaleźć właściwą czcionkę, która będzie podawana do GlyphLayout.

W tym przypadku używam instancji wyrzucania etykiety, aby dowiedzieć się wszystkiego dla mnie, a następnie zapytaj etykietę o szerokość.

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 ... 

To nie jest odpowiedź, jeśli chcesz umieścić tekst samodzielnie, ale warto zrobić układ UI stabilny i mniej zależny od rzeczywistej zawartości komórek.

Powiązane problemy