【问题标题】:LibGDX Button does not recognize clicks (Stage + ChangeListener)LibGDX 按钮无法识别点击(Stage + ChangeListener)
【发布时间】:2023-03-11 01:10:02
【问题描述】:

编辑:First Cemmentator "Second" 是对的。我忘了设置 Gdx.input.setInputProcessor(stage); - 现在一切正常。谢谢!


我的 Libgdx 按钮“返回”、“菜单”和“TryAgain”(将您带回另一个屏幕)不起作用。

我尝试了所有我能找到的解决方案,但它们仍然无法正常工作。我还在我的其他屏幕中使用按钮和阶段,它们都像魅力一样工作。

你们发现代码中有任何错误吗? CreateStage() 创建舞台并通过渲染方法显示。

非常感谢任何帮助!

public class HighscoreScreen extends ScreenAdapter {

private final GameClass game;
private int score;
private String name;
private boolean menuView;

private SpriteBatch batch;
private BitmapFont scoreFont;

private String[] players;
private int[] scores;
private int counter = 0;
private OrthographicCamera camera;
private Stage stage;
private ScreenViewport v;

public HighscoreScreen (GameClass game, OrthographicCamera camera, int score, String name) {
    this.camera = camera;
    this.game = game;
    this.score = score;
    this.name = name;
    this.batch = new SpriteBatch();
    menuView = false;
    batch = new SpriteBatch();

    scoreFont = new BitmapFont(Gdx.files.internal("Fonts/score.fnt"),
            Gdx.files.internal("Fonts/score.png"),false);
    createStage();
}

public HighscoreScreen (GameClass game, OrthographicCamera camera){
    this.game = game;
    this.camera = camera;
    this.batch = new SpriteBatch();
    menuView = true;

    scoreFont = new BitmapFont(Gdx.files.internal("Fonts/score.fnt"),
            Gdx.files.internal("Fonts/score.png"),false);

}

public void createStage(){

    v = new ScreenViewport();
    v.setCamera(camera);
    stage = new Stage(v, batch);

    if (menuView) {

        Buttons back = new Buttons("Back");
        stage.addActor(back.createButton(GameInfo.WIDTH / 2 - 100,
                GameInfo.HEIGHT / 2 - 200));

        back.addListener(new ChangeListener() {
            @Override
            public void changed(ChangeEvent event, Actor actor) {
                game.setScreen(new MenuScreen(game));
            }
        });

    } else {

        Buttons tryAgain = new Buttons("Try Again");
        stage.addActor(tryAgain.createButton(GameInfo.WIDTH / 2 - 200,
                GameInfo.HEIGHT / 2 - 200));

        tryAgain.addListener(new ChangeListener() {
            @Override
            public void changed(ChangeEvent event, Actor actor) {
                game.setScreen(new SurvivalScreen(game, name));
            }
        });

        Buttons menu = new Buttons("Menu");
        stage.addActor(menu.createButton(GameInfo.WIDTH / 2,
                GameInfo.HEIGHT / 2 - 200));

        menu.addListener(new ChangeListener() {
            @Override
            public void changed(ChangeEvent event, Actor actor) {
                game.setScreen(new MenuScreen(game));
            }
        });
    }
}

@Override
public void render(float delta) {

    Gdx.gl.glClearColor(0, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

    if (menuView) {

        if (counter == 0) {

            createStage();
            writeScoresToFile();
            readHighscore();
            counter++;

        }

        batch.begin();
        highscoreToFont();
        batch.end();
        stage.act();
        stage.draw();


    } else {

        if (counter == 0) {

            createStage();
            writeScoresToFile();
            readHighscore();
            compareHighscore();
            writeHighscore();
            counter++;

        }

        batch.begin();
        highscoreToFont();
        batch.end();
        stage.act();
        stage.draw();

    }

}

public void dispose(){
    batch.dispose();
    stage.dispose();
}

【问题讨论】:

  • 您使用的 Buttons 类是什么?我在我的项目中找到的唯一一个是用于鼠标按钮的“com.badlogic.gdx.Input.Buttons”,但它没有您正在使用的构造函数或方法。到目前为止,我使用的是 scene2d 和 TextButton,但我也是 libgdx 的新手(2019 年 4 月中旬的夜间版本)。
  • 我有自己的按钮类,我正在使用“badlogic.gdx.scenes.scene2d.ui.Button;”

标签: java button libgdx stage


【解决方案1】:

您可能缺少舞台输入处理器的设置(至少它不在您发布的代码中)。

Gdx.input.setInputProcessor(stage);

注意:
假设 Buttons 类返回正确的演员。
(见我上面的评论)

【讨论】:

  • 你完全正确。那是缺失的部分。我知道我忘记了什么...谢谢,祝您有美好的一天! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
  • 2021-09-06
  • 1970-01-01
  • 2020-10-22
  • 1970-01-01
相关资源
最近更新 更多