gpt4 book ai didi

java - getX() 调用时出现 NullPointerException(Scene2d + Libgdx)

转载 作者:行者123 更新时间:2023-11-29 03:40:29 25 4
gpt4 key购买 nike

我正在尝试创建一个简单的 BreakOut 克隆来熟悉 LibGDX 和 scene2d。但是,在组装了一个非常基本的示例让我自己开始之后,我在一个定义非常明确的对象上遇到了 NullPointerException。

我有一个名为 Paddle 的 Actor 类,它在我的程序中有一个名为 paddle 的实例。它被声明为全局变量并在 create() 方法中初始化。当我运行该程序时,它在我的 render() 方法中返回一个错误,该错误用于检查桨是否在屏幕边界之外的代码:

// make sure the paddle stays within the bounds of the screen
if(paddle.getX() < 0) paddle.setX(0); // <--- error is detected here
if(paddle.getX() > 800 - 200) paddle.setX(600);

这是返回的错误:

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: java.lang.NullPointerException
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:111)
Caused by: java.lang.NullPointerException
at com.freakout.Game.render(Game.java:150)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:190)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:108)

这是 Paddle 类;

public class Paddle extends Actor {
TextureRegion region;
public Paddle(){
region = new TextureRegion(new Texture(Gdx.files.internal("paddle.png")), 800/2 - 200 /2, 20);
}
}

Here's the code以防有助于了解整个事情。

编辑:感谢评论,我找到了答案:我在发布后立即意识到我错过了什么 - 看起来我重新定义了 paddle 变量的范围(通过使用 Paddle paddle = new Paddle(...))是方法的局部而不是全局。因此,当它试图访问该对象时,它总是返回 null,因为该对象在 create() 方法之外是不可访问的。

如果您的 Actors 在基本调用中无法正常工作,那可能是您的罪魁祸首。

最佳答案

我查看了您的代码,发现在您的 create() 方法中,您通过“new Paddle()”创建了一个 Paddle 并将其分配给本地此行“Paddle paddle = new Paddle();”中的变量“paddle”。所以实际上正因为如此,Game 类的名为“paddle”的变量保持未初始化状态(因为被方法的局部变量隐藏了)。因此,当在您的 render() 方法中访问它时,您会得到 NullPointerException

要摆脱这个东西,只需将“Paddle paddle = new Paddle();”这一行变成“paddle = new Paddle();”,你就可以了完成。

关于java - getX() 调用时出现 NullPointerException(Scene2d + Libgdx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13423506/

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