Подтвердить что ты не робот

Как получить ширину строки в Libgdx?

Мне интересно узнать, как получить ширину моей строки в пикселях

4b9b3361

Ответ 1

BitmapFont API < 1.5.6

Чтобы измерить ширину a String, вы используете свой Font и получите bounds String, вы собираетесь рисовать.

BitmapFont.getBounds(String str).width

BitmapFont API

Вы можете получить высоту для правильного смещения для рисования. Просто замените ширину на высоту.

Кроме того, для многострочных текстов используйте getMultiLineBounds(someString).width для получения границ.


BitmapFont API >= 1.5.6

API BitmapFont изменен в 1.5.7, поэтому теперь можно получить следующие ограничения:

BitmapFont.TextBounds и getBounds завершены. Вместо этого дайте строке GlyphLayout и получите границы, используя поля ширины и высоты. Затем вы можете нарисовать текст, передав тот же GlyphLayout в BitmapFont, что означает, что глифы не должны быть выложены дважды, как раньше.

Источник

Пример:

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

Ответ 2

По ответам @Nates: fooobar.com/questions/237722/... метод вызова

BitmapFont.getBounds(String str).width

не всегда возвращает правильную ширину! Особенно, когда вы повторно используете шрифт. Если вы хотите нарисовать текст, например in the center of part of view port, вы можете избежать этой проблемы, используя другой метод

BitmapFont.drawWrapped(...)

Пример кода:

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

Ответ 3

Если вы используете скины в пользовательском интерфейсе, вам сложно найти правильный шрифт для подачи в 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 ...

Это не ответ, если вы хотите разместить текст самостоятельно, но полезно сделать компоновку пользовательского интерфейса стабильной и менее зависимой от фактического содержимого ячеек.