Nano Hash - криптовалюты, майнинг, программирование

Как создать кнопку в libgdx?

Я хочу создать кнопку, которая меняется, когда пользователь наводит на нее курсор или нажимает на нее. Я создал следующую переменную

Button buttonPlay = new Button();

Я не знаю, что теперь делать, как загрузить изображения? Как вставить текст в кнопку? Как реализовать события/эффекты (наведение, клик)?

Было бы очень полезно, если бы кто-то мог написать пример кода для кнопки.

31.01.2014


Ответы:


1

Кнопка — это просто актер в libgdx. Для рендеринга актера вы используете сцену, которая содержит всех актеров на экране, рендерит их и обновляет. Я предполагаю, что вам нужна кнопка с текстом, поэтому вы должны использовать класс TextButton и добавить его на сцену. TextButton принимает строку для рендеринга и ButtonStyle, в данном случае TextButtonStyle, который в основном представляет собой класс, содержащий всю информацию о кнопке (шрифт, который можно отрисовывать, пока он не нажат, который можно отрисовывать, когда он нажат и т. д.).

   public class ButtonExample extends Game{

    Stage stage;
    TextButton button;
    TextButtonStyle textButtonStyle;
    BitmapFont font;
    Skin skin;
    TextureAtlas buttonAtlas;

    @Override
    public void create() {      
        stage = new Stage();
        Gdx.input.setInputProcessor(stage);
        font = new BitmapFont();
        skin = new Skin();
        buttonAtlas = new TextureAtlas(Gdx.files.internal("buttons/buttons.pack"));
        skin.addRegions(buttonAtlas);
        textButtonStyle = new TextButtonStyle();
        textButtonStyle.font = font;
        textButtonStyle.up = skin.getDrawable("up-button");
        textButtonStyle.down = skin.getDrawable("down-button");
        textButtonStyle.checked = skin.getDrawable("checked-button");
        button = new TextButton("Button1", textButtonStyle);
        stage.addActor(button);
    }

    @Override
    public void render() {      
        super.render();
        stage.draw();
    }
}

Так что здесь происходит? Я создаю сцену, шрифт и текстурный атлас со всеми текстурами для кнопок в «buttons.pack». Затем я инициализирую пустой TextButtonStyle и добавляю шрифт и текстуры для состояний «вверх», «вниз» и «отмечено». font, up, down и checked — все это статические переменные типа Drawable, поэтому вы действительно можете передать любой вид Drawable (текстура, 9-патч и т. д.). Затем просто добавьте кнопку на сцену.

Теперь, чтобы что-то сделать, когда кнопка на самом деле нажата, вы должны добавить слушателя к кнопке, ChangeListener.

    button.addListener(new ChangeListener() {
        @Override
        public void changed (ChangeEvent event, Actor actor) {
            System.out.println("Button Pressed");
        }
    });

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

01.02.2014
  • Спасибо большое!! это было так полезно, только один вопрос .. как я могу создать файл buttons.pack? 01.02.2014
  • Israel G - если вы нашли ответ, пожалуйста, опубликуйте его, чтобы другим людям не пришлось создавать новую тему. 03.09.2014
  • хороший учебник: libdgxtutorials.blogspot.com /2013/09/ 06.09.2014
  • Есть ли четкая/чистая информативная страница о том, как работают файлы пакета? 25.04.2015
  • @HerbMeehan Кажется, у людей все еще есть проблемы, насколько я помню, в моем проекте libgdx был файл jar, который вы можете запустить, и вы получаете простое программное обеспечение для упаковки, которое может упаковывать изображения в файл .pack. Найдите его в Google. 30.12.2015

  • 2

    buttons.pack — это файл, сгенерированный упаковщиком текстур libgdx, упаковщик текстур — это инструмент, который можно использовать для создания атласа текстур. То есть несколько изображений, которые вы можете загрузить в графический интерфейс, используя один файл. это также поможет сэкономить немного памяти, перейдите по этой ссылке`https://code.google.com/p/libgdx-texturepacker-gui/downloads/list, https://github.com/libgdx/libgdx/wiki/Texture-packer

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

  • 3

    Вот как вы это делаете без добавления скина

        TextButton.TextButtonStyle textButtonStyle = new TextButton.TextButtonStyle();
        textButtonStyle.font = yourCustomFont;
        textButtonStyle.fontColor = Color.WHITE;
        stage.add(new TextButton("Custom Btn ", textButtonStyle));
    
    15.04.2021
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..