WedX - журнал о программировании и компьютерных науках

Кнопка libgdx при нажатии не работает

Я создал кнопку и хочу изменить ее внешний вид при наведении и нажатии. Я не получаю ошибок, но это не работает. Он не меняет изображение при нажатии или наведении курсора. Единственное отображаемое изображение — это изображение из playButtonStyle.up.

Вот мой код:

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.assets.AssetManager;
import com.badlogic.gdx.graphics.GL30;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.InputListener;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.*;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.scenes.scene2d.utils.Drawable;
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
import com.badlogic.gdx.utils.viewport.ScreenViewport;
import com.starships.MainClass;
import com.sun.prism.paint.Color;
import helpers.Info;

public class MainMenuScreen implements Screen {

    MainClass game;
    Stage stage;    
    private Texture background;    
    private AssetManager assets;
    private TextureAtlas atlas;   
    private Skin skin;

    private Table table;
    private Button playButton;

    public MainMenuScreen(MainClass mainClass) {
        game = mainClass;

        Gdx.input.setInputProcessor(stage); 
        stage = new Stage();
        background = new Texture(Gdx.files.internal("Background.png"));

        assets = new AssetManager();
        assets.load("Buttons/PlayButtonAtlas.atlas", TextureAtlas.class);
        assets.finishLoading();
        atlas = assets.get("Buttons/PlayButtonAtlas.atlas");

        skin = new Skin(atlas);

        table = new Table(skin);
        table.setBounds(0, 0, Info.WIDTH, Info.HEIGHT);

        Button.ButtonStyle playButtonStyle = new Button.ButtonStyle();
        playButtonStyle.up = skin.getDrawable("PlayButton");
        playButtonStyle.over = skin.getDrawable("PlayButtonHover");
        playButtonStyle.down = skin.getDrawable("PlayButtonPressed");

        playButton = new Button(playButtonStyle);   
        table.add(playButton);
        stage.addActor(table);
    }

    @Override
    public void show() {

    }

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(0, 0.7f, 0.8f, 1);
        Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT);

        stage.act(delta);
        stage.draw();
    }

    @Override
    public void resize(int width, int height) {

    }

    @Override
    public void pause() {

    }

    @Override
    public void resume() {

    }

    @Override
    public void hide() {

    }

    @Override
    public void dispose() {
        stage.dispose();
    }
}
23.05.2017


Ответы:


1

Установите InputProcessor после инициализации Stage следующим образом:

public MainMenuScreen(MainClass mainClass) {
   game = mainClass;
   stage = new Stage();
   Gdx.input.setInputProcessor(stage);   // This call should be after initialisation of stage.
   background = new Texture(Gdx.files.internal("Background.png"));
   ...
   ...
}
23.05.2017
  • Спасибо. Это сработало. Целый день пытаюсь сделать кнопку.. :\ 23.05.2017
  • @ iulyus01 Если вам нужно несколько процессоров ввода, вы можете использовать InputMultiplexer. Сначала поместите InputProcessors (стадия также является InputProcessor) с более высокими приоритетами, а затем добавьте InputMultiplexer вместо одной стадии, как показано в этом ответе. 24.05.2017
  • Новые материалы

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]