Масштабирование кнопки stage2d с помощью libgdx

Я не знаю, это только я, но ярлыки меня смущают. Они предназначены для того, чтобы сохранить размер, который они заданы, или есть способ масштабировать изображение внутри них? Я понимаю, что они могут использовать девять пунктов для заполнения определенных областей, растягивая изображение, но я хочу масштабировать изображение, которое оно растягивает. Я использую TextButton для своих кнопок меню, но они слишком большие, и я хотел бы знать, как их масштабировать. Я извлекаю кожу из атласа, в котором есть девять снимков. Вот экран настроек: Экран настроек Вот изображения в пакете, который я использую: Упаковано девять снимков Вот инициализация TextureAtlas и Skin:

buttonAtlas = new TextureAtlas(Gdx.files.internal("buttons/buttons.pack")); buttonSkin = new Skin(buttonAtlas); 

Вот инициализация этой кнопки меню.

 TextButtonStyle textButtonStyle = new TextButtonStyle(); textButtonStyle.up = Assets.buttonSkin.getDrawable("bluebutton"); textButtonStyle.down = Assets.buttonSkin.getDrawable("redbutton"); textButtonStyle.font = font; buttonMenu = new TextButton("Menu", textButtonStyle); buttonMenu.pad(20.0f); buttonMenu.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { game.fade.startFadeOut(); super.clicked(event, x, y); } }); 

И, возможно, я мог бы изменить, как я положил его в таблицу, или как я ставлю таблицу на сцену?

 table.add(buttonMenu).width(Gdx.graphics.getWidth()/4); stage.addActor(table); 

В крайнем случае, я полагаю, я мог бы попытаться создать свой собственный текстовый оператор, который я мог бы масштабировать, спасибо за ваше время.

Прежде всего, если вы знаете, что ваши изображения слишком велики: лучше всего было бы масштабировать сами изображения до меньшего размера, а затем использовать TexturePacker тоже создать новый TextureAtlas, содержащий меньшие изображения.

Во всяком случае вы можете масштабировать кнопку изображения с помощью TableLayout, если вы действительно этого хотите, см. Пример:

 table.add(buttonMenu).width(100).height(100); 

Ответ выше не работал для меня, но у меня есть решение.

Вы можете сделать дополнительную камеру и прикрепить ее к своей сцене. Для масштабирования таблицы просто масштабируйте размер окна просмотра дополнительной камеры

Примером может служить:

 //Heres where you set the scale of your buttons and your table Camera secondaryCamera = new Camera(Gdx.graphics.getWidth() * scale, Gdx.graphics.getHeight() * scale); Stage stage = new Stage(); Table table = new Table(); ImageButton button = new ImageButton(drawableUp, drawableDown, drawableChecked); table.setFillParent(true); stage.getViewport().setCamera(secondaryCamera); table.add(ImageButton); stage.addActor(table); 

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

table.add(buttonMenu).width(100).height(100); Должен работать, и вам просто нужно настроить параметры width и height по своему вкусу, или вы можете использовать метод setBounds . Вот пример:

  TextButton myButton = new TextButton("Press Me", style); myButton.setBounds(xCoordinate, yCoordinate, width, height); 

Вы можете установить размер Drawable в ButtonStyle для изменения размера вашей Button :

 float scale = 0.5f; float currentHeight = textButtonStyle.up.getMinHeight(); textButtonStyle.up.setMinHeight(currentHeight * scale); 

Для получения дополнительной информации см. Официальный документ для макета :

Виджеты пользовательского интерфейса не устанавливают свой собственный размер и позицию. Вместо этого родительский виджет устанавливает размер и положение каждого дочернего элемента. Виджеты предоставляют минимальный, предпочтительный и максимальный размер, который родитель может использовать в качестве подсказок. Некоторым родительским виджетам, таким как Table и Container, могут быть предоставлены ограничения на размер и расположение детей. Чтобы дать виджету определенного размера в макете, минимальный, предпочтительный и максимальный размер виджета оставлен один, а ограничения размера установлены в родительском.

И вы можете найти реализацию Button.getPrefHeight() в исходном коде :

 public float getPrefHeight () { float height = super.getPrefHeight(); if (style.up != null) height = Math.max(height, style.up.getMinHeight()); if (style.down != null) height = Math.max(height, style.down.getMinHeight()); if (style.checked != null) height = Math.max(height, style.checked.getMinHeight()); return height; } 
Intereting Posts
Android recyclerView findViewHolderForAdapterPosition возвращает null Невозможно создать экземпляр ошибки Java View.OnClickListener «UnderlineColorAndroid – это не допустимое свойство стиля» в приложении для реагирования на конкретные приложения Android Java.lang.NoSuchMethodError: не сортировать метод интерфейса (исключение Ljava / util / Comparator;) в сортировке arraylist android Прокрутка RecyclerView на вставке Как остановить процесс из System.Diagnostics.Process и получить статистику в конце Как получить результат камеры как uri в папке с данными? Как создать xml-файл в android Дооснащение + RxJava не кэширует ответы, подозрительные заголовки ответов Динамический значок приложения Google Play App Какие API в Android используются Facebook для создания чат-голов? Как распечатать изображение на Bluetooth-принтере в Android? Выбросьте исключение в doInBackground и поймайте inPostExecute Android – Google Maps api v2 – Отключить управление увеличением Как получить зарегистрированную учетную запись Google на телефонах Android?