//这是我正在调用gameoverscreen的脚本。当我的子画面与另一个子画面重叠时,我希望它设置为此屏幕。

if (grumpface.whiteballoon.getBoundingRectangle().overlaps(spriterect)) {
            System.out.println("hey");
            ((Game) Gdx.app.getApplicationListener()).setScreen(new GameOverScreen());
        };


然后这是我也正在设置屏幕的班级。它在绘制舞台的过程中给了我一个错误,这使我认为show()方法没有触发创建舞台。

class GameOverScreen implements Screen{

    private Stage stage;

    // Called automatically once for init objects
    @Override
    public void show() {

        Stage stage = new Stage();
        float delta = Gdx.graphics.getDeltaTime();
        stage.setDebugAll(true); // Set outlines for Stage elements for easy debug

        BitmapFont white = new BitmapFont(Gdx.files.internal("hazey.fnt"), false);
        LabelStyle headingStyle = new LabelStyle(white, Color.WHITE);
        Label gameoverstring = new Label("game ovaaaa!", headingStyle);
        gameoverstring.setPosition(100, 100);
        stage.addActor(gameoverstring);

    }

    // Called every frame so try to put no object creation in it
    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        stage.act();
        stage.draw();
    }


这是每当发生重叠时的堆栈跟踪错误。

Exception in thread "LWJGL Application" java.lang.NullPointerException
    at com.mygdx.game.GameOverScreen.render(GameOverScreen.java:72)
    at com.badlogic.gdx.Game.render(Game.java:46)
    at com.mygdx.game.MyGdxGame.render(MyGdxGame.java:139)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:214)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplicationrun(LwjglApplication.java:120)

最佳答案

问题是,您正在stage方法中创建一个名为show()的变量,但应使用类变量。

它应如下所示:stage = new Stage();

因为当您在节目中分配Stage stage = new Stage();时,会在本地变量stage中而不是在类变量中写入它。因此,即使在调用Stage方法之后创建的show();也是垃圾。因此,当您输入render(float delta);方法时,stage类变量为null,并且会发生异常。

关于java - libgdx-游戏画面不会显示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30021278/

10-12 03:48