Как получить ширину строки в Libgdx?
Интересно, знаю, как получить ширину моей строки в пикселях
3 ответа
API BitmapFont < 1.5.6
Чтобы измерить ширину String
вы используете свой Font
и получить bounds
из String
собираешься рисовать.
BitmapFont.getBounds(String str).width
Вы также можете получить высоту для правого смещения для рисования. Просто замените ширину на высоту.
Кроме того, для многострочных текстов используйте 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
Согласно ответу @Nates: /questions/20808284/libgdx-getbounds-ne-vozvraschaet-pravilnuyu-shirinu/20808291#20808291 вызывающий метод
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);
Если вы используете скины в пользовательском интерфейсе, вам будет сложно найти правильный шрифт для подачи в GlyphLayout.
В этом случае я использую выбрасываемый экземпляр Label, чтобы выяснить все для меня, а затем спрашиваю 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 ...
Это не ответ, если вы хотите расположить текст самостоятельно, но полезно сделать макет пользовательского интерфейса стабильным и менее зависимым от фактического содержимого ячеек.