Je me demande comment obtenir la width de ma chaîne en pixels
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
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.
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.
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
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);
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.