web-dev-qa-db-fra.com

Comment obtenir une largeur de chaîne dans Libgdx?

Je me demande comment obtenir la width de ma chaîne en pixels

23
LeSam

API BitmapFont <1.5.6

Pour mesurer la largeur d'une String, vous utilisez votre Font et obtenez la bounds de la String, vous allez dessiner.

BitmapFont.getBounds(String str).width

API BitmapFont

Vous pouvez également obtenir la hauteur du décalage correct pour le dessin. Il suffit de remplacer la largeur par la hauteur.

De plus, pour les textes multilignes, utilisez getMultiLineBounds(someString).width pour obtenir les limites.


API BitmapFont> = 1.5.6

L'API BitmapFont a été modifiée dans la version 1.5.7 il existe donc un moyen différent d'obtenir les limites maintenant:

BitmapFont.TextBounds et getBounds sont terminés. Donnez plutôt la chaîne à GlyphLayout et obtenez les bornes en utilisant ses champs width et height. Vous pouvez ensuite dessiner le texte en passant le même GlyphLayout à BitmapFont, ce qui signifie que les glyphes ne doivent plus être disposés deux fois comme auparavant. 

La source

Exemple:

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
61
BennX

Selon @Nates, répondez: https://stackoverflow.com/a/20759876/619673 méthode d'appelant

BitmapFont.getBounds(String str).width

ne retourne pas toujours la bonne largeur! Surtout lorsque vous réutilisez une police. Si vous souhaitez dessiner du texte, par exemple in the center of part of view port, vous pouvez éviter ce problème en utilisant une autre méthode. 

BitmapFont.drawWrapped (...)

Exemple de code:

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

Si vous utilisez des skins dans l'interface utilisateur, il est fastidieux de trouver la police appropriée pour alimenter GlyphLayout.

Dans ce cas, j’utilise une instance jetable de Label pour tout comprendre, puis je demande la largeur à Label.

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

Ce n'est pas la réponse si vous souhaitez positionner le texte vous-même, mais il est utile de rendre une présentation d'interface utilisateur stable et moins dépendante du contenu réel des cellules.

0
Eric Obermühlner