gpt4 book ai didi

java - 切换屏幕时 LibGDX NullPointerException

转载 作者:太空狗 更新时间:2023-10-29 14:40:27 25 4
gpt4 key购买 nike

我正在使用 LibGDX 为 Android 开发游戏。我已经创建了几个屏幕,如果我似乎还没有访问过它们,我就可以成功访问它们。例如,我可以从 StartScreenHomeScreenLoginScreenMainMenuScreen 就好了。但是,当我尝试通过单击注销按钮从我的 MainMenuScreen 切换到我的应用程序的 StartScreen 时,我得到一个 NPE:

Exception in thread "LWJGL Application" java.lang.NullPointerException
at com.mathsvszombies2.game.Screens.MainMenuScreen$3.clicked(MainMenuScreen.java:145)
at com.badlogic.gdx.scenes.scene2d.utils.ClickListener.touchUp(ClickListener.java:89)
at com.badlogic.gdx.scenes.scene2d.InputListener.handle(InputListener.java:58)
at com.badlogic.gdx.scenes.scene2d.Stage.touchUp(Stage.java:353)
at com.badlogic.gdx.backends.lwjgl.LwjglInput.processEvents(LwjglInput.java:332)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:217)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:126)

当我尝试在单击“注册”按钮 后从我的SignUpScreen 转到LoginScreen 时,我遇到了同样的错误,但是,我没有我不认为使用 button 是错误的,因为正如我之前提到的,转到各种 screens 最初使用 button 点击(例如 HomeScreenLoginScreen 使用 Login button)。因此,我认为我的应用程序中存在一个常见的错误。让我们关注我的 MainMenuScreenStartScreenlogout button 点击时的错误。

我首先在 MainMenuScreen 类的顶部声明我的 Game 变量:

private Game game;

这是我的 MainMenuScreen 构造函数:

public MainMenuScreen(Game game) {

app.log("Screen", "Main Menu Screen");
camera= new OrthographicCamera();
viewport = new FitViewport(MathsVsZombies.V_WIDTH, MathsVsZombies.V_HEIGHT, camera);
stage = new Stage(viewport);
}

这是我尝试切换屏幕的地方:

logoutBtn.addListener(new ClickListener(){

@Override
public void clicked(InputEvent event, float x, float y) {
LoginScreen.isLoggedIn = false;
game.setScreen(new StartScreen(game));
}
});

这是我的 StartScreen 类 - 我首先在 StartScreen 类的顶部声明我的 Game 变量:

private Game game;

这是我的 StartScreen 构造函数:

public StartScreen(Game game){
Gdx.app.log("Screen", "Start Screen");
this.game = game;
camera= new OrthographicCamera();
viewport = new FitViewport(MathsVsZombies.V_WIDTH, MathsVsZombies.V_HEIGHT, camera);
stage = new Stage(viewport);
StartScreenActor actor = new StartScreenActor();
stage.addActor(actor);
Gdx.input.setInputProcessor(stage);
}

我该如何解决这个问题?

最佳答案

简单地说,您所要做的就是在您拥有的任何屏幕类的构造函数方法中添加这行代码:

this.game = game;

这是说这个对象是游戏的一个实例。没有它,当您说 game.setScreen(new StartScreen(game)); 时将“游戏”传递到 StartScreen 没有任何引用,因此会给出 NullPointerException。

更新的 MainMenuScreen 构造函数:

public MainMenuScreen(Game game) {
this.game = game;
app.log("Screen", "Main Menu Screen");
camera= new OrthographicCamera();
viewport = new FitViewport(MathsVsZombies.V_WIDTH, MathsVsZombies.V_HEIGHT, camera);
stage = new Stage(viewport);
}

这是您唯一需要做的改变,现在改变屏幕就可以正常工作了。

关于java - 切换屏幕时 LibGDX NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49145396/

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