3

我一直在 Google 上搜索有关如何使用 Scene2D 将多个屏幕与 LibGDX 一起使用的教程。到目前为止,这就是我在场景处理类中所拥有的,但我不知道从这里去哪里。我知道我必须对构造函数做一些事情,MainMenu.java但我不知道它是什么。

到目前为止我得到了什么:

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

    }

}
4

2 回答 2

6

我不喜欢将我的屏幕类与我的游戏类结合起来。我使用的方法是我的所有游戏屏幕的抽象类,它有一个标志和功能来指示正在请求“下一个屏幕”。然后render我的 Game 类的方法可以检查该标志并相应地渲染一个新屏幕。

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标志。

于 2013-09-05T03:14:01.297 回答
4

I know this is old, but just want to point out that accepted answer WILL NOT render; just got tied up on this for 2 hrs...

// ...


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

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

You MUST add a call to super.render() in a Game subclass if you override Game's render() method.

于 2015-03-25T22:10:57.843 回答