gpt4 book ai didi

java - LIBGDX - SetScreen 空指针异常

转载 作者:行者123 更新时间:2023-12-02 06:50:57 24 4
gpt4 key购买 nike

我实际上遇到了 libgdx 的问题。

打字游戏.java

public class TypingGame extends Game {

TypingGame game;

GameScreen gameScreen;
GameOverScreen gameOverScreen;

@Override
public void create() {

gameScreen = new GameScreen();
gameOverScreen = new GameOverScreen(game);

Texture.setEnforcePotImages(false);
setScreen(new GameScreen()); // Default screen : Gamescreen

}


}

我希望能够使用 setScreen 更改当前屏幕。这就是我所做的:

GameScreen.java

public class GameScreen implements Screen, InputProcessor{

private World world;
private WorldRenderer renderer;
private WorldController controller;
TypingGame game;


@Override
public void render(float delta) {

Gdx.gl.glClearColor(0.5f, 0.1f, 0.1f, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
Timer.elapsedTime(delta);
renderer.render(delta);
controller.update(delta);


if(Player.health == 0) game.setScreen(new GameOverScreen(game)); // If the player died, switch to GameOverScreen
}

// And so on...

GameOverScreen.java

public class GameOverScreen implements Screen{


TypingGame game;
GameScreen gameScreen;

public GameOverScreen(TypingGame game){
this.game = game;
gameScreen = new GameScreen();
}

@Override
public void render(float delta) {


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

}

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


}

@Override
public void show() {


}

@Override
public void hide() {

}

@Override
public void pause() {

}

@Override
public void resume() {

}

@Override
public void dispose() {

}

}

我不明白为什么会出现此错误:

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: java.lang.NullPointerException
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:113)
Caused by: java.lang.NullPointerException

这应该很容易使用,但我真正可以使用 setScreen 的唯一类是......TypingGame.java。

非常感谢您的帮助,感谢并为我糟糕的英语感到抱歉。

青色!

最佳答案

在您的 TypingGame 类中,您不会创建自身的新实例:

TypingGame game; //------------------ this!
...
gameOverScreen = new GameOverScreen(game); //----you don't pass the new "game", you pass "this"

您还必须对 GameScreen 执行相同的操作。

gameScreen = new GameScreen(this); //---like this

您收到 NPE 是因为您在 GameScreen 中尝试使用不存在的游戏。您需要使用“this”将 TypingGame 实例传递到 GameScreen,并将其存储在:

TypingGame game;

您的游戏屏幕。

另外,作为旁注(但非常重要!),您正在创建一个 GameScreen 实例和一个 GameOverScreen 实例,但每次您设置屏幕时都会创建一个新屏幕...

关于java - LIBGDX - SetScreen 空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18037852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com