LibGDX 在屏幕之间切换导致 UI 按钮无法正确加载

LibGDX switching between screens causes UI buttons not to load properly

我目前正在使用 Stage、Button、addListener 和 Screen 为我的 LibGDX 项目创建多屏幕设置。我为整个游戏创建了一个舞台,并为听众添加了按钮。单击按钮时,侦听器会将用户发送到另一个屏幕。它看起来如下: Menu Screen #1

然后当我点击登录时,它正确地将我发送到登录屏幕,在那里我有返回的菜单按钮,但该按钮看起来如下: Login Screen

按钮仍然可以点击,点击后会return进入菜单,但看起来应该与之前的按钮相同。另外,当我返回菜单时,它看起来像这样: Menu Screen #2

我的菜单屏幕代码是:

@Override
public void show() {
    Gdx.graphics.setTitle("Menu");
    Button startButton = game.inputFactory.createButton("Start", 0, 150, 300, 50);
    Button loginButton = game.inputFactory.createButton("Login", 0, 220, 300, 50);
    Button signUpButton = game.inputFactory.createButton("Sign Up", 0, 290, 300, 50);

    game.inputFactory.onClickGoTo(startButton, game, new GameScreen(game));
    game.inputFactory.onClickGoTo(loginButton, game, new LoginScreen(game));
}

@Override
public void render(float delta) {
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    game.batch.begin();
    game.batch.end();
    game.stage.draw();
}

我的登录屏幕代码是:

@Override
public void show() {
    game.inputFactory.clearStage();
    game.stage.clear();
    Gdx.graphics.setTitle("Login");
    Button menuButton = game.inputFactory.createButton("Menu", 0, 150, 300, 50);
    game.inputFactory.onClickGoTo(menuButton, game, new MenuScreen(game));
}

@Override
public void render(float delta) {
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    game.batch.begin();
    game.font32.draw(game.batch, "Login", Gdx.graphics.getWidth() / 2 - 50, Gdx.graphics.getHeight() - 30);
    game.batch.end();
    game.stage.draw();
}

其中 onClickGoTo 将 clickListener 添加到按钮并重定向到新屏幕。 其中 inputFactory 是 class,我在其中创建带有预设皮肤的按钮。

我以为它与绘制舞台有关,但我不确定如何解决这个问题。

看来你在libgdx舞台上看错了class。我在学习的时候也遇到过同样的错误

每个屏幕应该有不同的阶段。

Your MenuScreen has his own stage with the menu buttons.

And your LoginScreen has his own stage with the login buttons

这意味着您可以在屏幕构造函数中创建单独的舞台并添加所需的按钮。

菜单屏幕:

menustage.add(startButton); menustage.add(startButton); menustage.add(signUpButton );

登录屏幕:

loginstage.add(menuButton);


这个问题让我写了很多复杂的代码,但是当 libgdx class 对我来说很清楚时,它就很有意义了。

您可以为一个屏幕使用不同的阶段,从而可以自由地为您的屏幕提供不同的视图!