如何在Scene2D libGDX中更换屏幕

3

我一直在谷歌上搜索使用Scene2D在LibGDX中如何使用多个屏幕的教程。到目前为止,这是我在场景处理类中拥有的代码,但我不知道下一步该怎么做。我知道我必须对MainMenu.java的构造函数进行某些操作,但我不知道具体是什么。

目前为止我所拥有的:

public class ScreenHandler extends Game{
    public MainMenu Main;
    @Override
    public void create() {
          Main= new MainMenu();
          setScreen(Main);

    }

}
2个回答

6

我不太喜欢将我的屏幕类与游戏类耦合。我的做法是使用一个抽象类来表示所有游戏屏幕,并提供标志和功能来指示请求“下一个屏幕”。我的游戏类的render方法可以检查该标志并相应地呈现新屏幕。

public class MyGame extends Game {

    // ...

    @Override
    public void create() {
        GameScreen screen1 = new GameScreen(); // extends AbstractScreen
        GameScreen screen2 = new GameScreen(); // extends AbstractScreen
        screen1.setNextScreen(screen2);
        screen2.setBackScreen(screen1);
    }

    @Override
    public void render() {
        AbstractScreen currentScreen = (AbstractScreen) getScreen();

        if (currentScreen.goBack) {
            setScreen(currentScreen.getBackScreen());
        } else if (currentScreen.goToNextScreen) {
            setScreen(currentScreen.getNextScreen());
        }
    }

在实践中,我不会在create方法中实例化所有屏幕,而是根据需要创建/处理屏幕的方法,但是上述内容是对一般思路的简化。

然后,各个屏幕负责根据需要设置goBackgoToNextScreen标志。


4

我知道这篇文章已经有点老了,但是我想指出的是,接受的答案是无法渲染的;我刚刚在这个问题上花费了2个小时...

// ...


@Override
public void render() {
    AbstractScreen currentScreen = (AbstractScreen) getScreen();

    if (currentScreen.goBack) {
        setScreen(currentScreen.getBackScreen());
    } else if (currentScreen.goToNextScreen) {
        setScreen(currentScreen.getNextScreen());
    }
}

如果您重写了Game的render()方法,则必须在Game子类中添加对super.render()的调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接