Libgdx多屏幕

6
感谢在这个论坛上获得的帮助,我成功推进了我的项目,但另一个障碍出现在我的面前。 我在使用Java libgdx时遇到了实现多个屏幕的问题,我想知道如何实现多个屏幕(一个用于主菜单,一个用于游戏玩法,一个用于加载屏幕,...)。 能够提供屏幕类结构示例或说明将非常有帮助。我尝试实现自己的屏幕管理器,但效果不佳...还需要一些指针来处理屏幕的释放,因为每次从主菜单转到游戏或选项菜单时创建屏幕不是一个很好的选择。欢迎任何想法、代码示例或建议。目前我拥有一些游戏屏幕类,当你渲染它们时,它们会在屏幕上绘制一些GUI,但像返回按钮这样的功能却无法实现,因为我不知道如何将它们链接起来。

1
我强烈推荐你阅读Steigert博客,因为它解释了所有的内容。http://steigert.blogspot.de/。虽然它不是完全最新的,但它确实向你展示了一些有用的东西,比如屏幕抽象等。 - bemeyer
1个回答

8

假设你有3个屏幕,分别是MainMenuScreen, OptionsScreen和GameScreen。

首先你需要在你的主类中声明它们。

代码如下:

public class MainClass extends Game implements ApplicationListener {

    private GameScreen gameScreen;
    private MenuScreen menuScreen;
    private OptionsScreen optionsScreen;

    @Override
    public void create() {



    }
    setGameScreen()
    {
        gameScreen=new GameScreen(this);
        setScreen(gameScreen);
    }
    setMenuScreen()
    {
        menuScreen=new menuScreen(this);
        setScreen(menuScreen);
    }
    setOptionsScreen()
    {
        optionsScreen=new OptionsScreen(this);
        setScreen(gameScreen);
    }



    @Override
    public void dispose() {

        super.dispose();
    }

    @Override
    public void render() {

        Gdx.gl.glClearColor(1, 1, 1, 1);
        Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

        super.render();
    }

    @Override
    public void resize(int width, int height) {

        super.resize(width, height);
    }

    @Override
    public void pause() {
        super.pause();
    }

    @Override
    public void resume() {
        super.resume();
    }
}

现在,您的每个屏幕都需要一个MainClass变量和它的构造函数。以GameScreen类为例,它应该是这样的:
public class GameScreen implements Screen{

    private MainClass mainClass;

    public GameScreen(MainClass mc)
    {
        mainClass=mc;
    }
    // your methods (show,render, pause, etc)
}

现在,当您想要更改屏幕时,只需在您的屏幕中使用即可。
mainClass.setMenuScreen();

在我看来,实际上你不需要在主类中声明它们,我也不建议持有所有这些引用,因为没有必要。当更改屏幕时,如果需要,只需创建一个新的屏幕即可。我只保留对GameScreen的引用,因为它比较大,需要更长时间来加载,但其他所有东西都是内存中的垃圾。 - bemeyer
1
非常好的方法,我喜欢mainClass处理如此重要的项目。我将有大约5-7个屏幕,并使用mainClass.screenWhatever切换屏幕是很干净的。顺便说一下,Game类已经实现了ApplicationListener接口。 - Herb Meehan

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