2013-05-17 14 views

risposta

56

BitmapFont API < 1.5.6

Per mesure la larghezza di un String si utilizza il Font e ottenere il bounds del String, stai per disegnare.

BitmapFont.getBounds(String str).width 

BitmapFont API

È possibile ottenere l'altezza per il diritto di offset per il disegno troppo. Sostituisci semplicemente la larghezza con l'altezza.

In aggiunta per i testi multilinea utilizzare getMultiLineBounds(someString).width per ottenere i limiti.


BitmapFont API> = 1.5.6

L'API BitmapFont cambiata in 1.5.7 cui v'è un modo diverso per ottenere i limiti ora:

BitmapFont.TextBounds e i getBound sono fatti. Invece, dai la stringa a GlyphLayout e ottieni i limiti usando i suoi campi di larghezza e altezza. È quindi possibile disegnare il testo passando lo stesso GlyphLayout a BitmapFont, il che significa che i glifi non devono essere disposti due volte come in passato.

Source

Esempio:

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

Inoltre è possibile utilizzare getMultiLineBounds (someString) .width per più testi di riga. –

+0

grazie! problema risolto – LeSam

+2

È deprecato nella versione più recente di libgdx. Non riesco a trovarlo nell'API .... È il loro altro modo di farlo? –

4

Secondo @Nates risposta: metodo

BitmapFont.getBounds(String str).width 

https://stackoverflow.com/a/20759876/619673 chiamante non restituisce sempre la larghezza corretta! Soprattutto quando si riutilizza il font. Se si vuole disegnare il testo, ad esempio in the center of part of view port, è possibile evitare questo problema utilizzando un altro metodo

BitmapFont.drawWrapped (...) Codice

Esempio:

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

Se si utilizzano gli skin nell'interfaccia utente è una seccatura per trovare il font corretto da inserire in GlyphLayout.

In questo caso, utilizzo un'istanza di etichetta gettata via per calcolare tutto per me, quindi chiedere all'etichetta la larghezza.

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

Questa non è la risposta, se si vuole posizionare il testo da soli, ma è utile per fare un layout dell'interfaccia utente stabile e meno dipendente dal contenuto effettivo delle celle.

Problemi correlati