Я не рекомендую использовать setScale()
, поскольку он влияет только на представление актера и вызывает проблемы с фактическими размерами в таблице.
Вы должны использовать подходящую ширину и высоту для ваших кнопок и использовать шрифт с большим размером текста.
Вы можете использовать GDX Freetype для генерации шрифтов с правильным размером при запуске.
Вот примерный подход к решению:
Я использую следующий подход для своих элементов пользовательского интерфейса в качестве примера для Label:
Это мой статический класс UIHelper:
public static Cell addToTable(Table table, Label label, float width) {
Label.LabelStyle style = new Label.LabelStyle(skin.get("default", Label.LabelStyle.class));
float aspectRatio = style.background.getMinWidth()/style.background.getMinHeight();
float height = width / aspectRatio;
style.font = Assets.font;
style.fontColor = Assets.font.getColor();
label.setStyle(style);
label.setAlignment(Align.center);
return table.add(label).width(width).height(height);
}
Тогда я могу просто позвонить:
float width = (float)Gdx.graphics.getWidth()*0.8f; // I want my label to be 80% of the screen width
UIHelper.addToTable(table, levelLabel, width).colspan(3).pad(20);
Для своих шрифтов я делаю это:
private static BitmapFont generateFont(){
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("skins/beemelon/passion-one-regular.ttf"));
FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
parameter.size = (int) (38 * Gdx.graphics.getDensity()); // Change the 38 to a value fit for your game
parameter.color = new Color(255f / 255f, 165f / 255f, 23f / 255f, 1f); // Divide by 255f to get a value between 0 and 1
parameter.borderWidth = parameter.size / 10f;
parameter.borderColor = Color.BLACK;
BitmapFont bitmapFont = generator.generateFont(parameter);
generator.dispose();
return bitmapFont;
}
Надеюсь, это поможет или подтолкнет вас в правильном направлении.