简体   繁体   English

如何在Scene2D libGDX中更改屏幕

[英]How to change Screens in Scene2D libGDX

I've been searching around Google for tutorials on how to use multiple screens with LibGDX using Scene2D. 我一直在谷歌搜索有关如何使用Scene2D使用LibGDX的多个屏幕的教程。 So far this is what I have in my Scene handling class but I don't know where to go from here. 到目前为止,这是我在场景处理课中的内容,但我不知道从哪里开始。 I know I have to do something to the constructor of MainMenu.java but I don't know what it is. 我知道我必须对MainMenu.java的构造函数做一些事情,但我不知道它是什么。

What I've got so far: 到目前为止我得到了什么:

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

    }

}

I'm not a big fan of making my screen classes coupled to my Game class. 我不喜欢让我的屏幕课程与我的Game课程相结合。 The approach that I'm using is an abstract class for all of my game's screens which has aa flag and functionality to indicate that a "next screen" is being requested. 我正在使用的方法是我所有游戏屏幕的抽象类,它有一个标志和功能,表示正在请求“下一个屏幕”。 The render method of my Game class can then check for that flag and render a new screen accordingly. 然后我的Game类的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());
        }
    }

In practice I wouldn't actually instantiate all the screens in the create method but instead have methods for creating/disposing screens as needed, but, the above is a simplification of the general idea. 在实践中,我实际上不会实例化create方法中的所有屏幕,而是根据需要创建/处理屏幕的方法,但是,上面是一般概念的简化。

Then the individual screens are responsible for setting the goBack and goToNextScreen flags as necessary. 然后各个屏幕负责根据需要设置goBackgoToNextScreen标志。

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... 刚刚被绑在这上面2小时......

// ...


@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. 如果你覆盖Game的render()方法,你必须在Game子类中添加对super.render()的调用。

I found this link that explains exactly what I need! 我发现这个链接可以解释我需要什么! https://code.google.com/p/libgdx-users/wiki/ScreenAndGameClasses https://code.google.com/p/libgdx-users/wiki/ScreenAndGameClasses

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM