我正在尝试创建一个简单的 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);
}
}
这是代码,以防有助于查看整个内容。
编辑:感谢评论,我找到了答案:我意识到我在发布后立即错过了什么 - 看起来我重新定义了 paddle 变量的范围(通过使用 Paddle paddle = new Paddle(...))在本地方法而不是全局。因此,当它试图访问该对象时,它总是返回 null,因为该对象在 create() 方法之外是不可访问的。
如果您的 Actor 在基本调用中无法正常工作,这可能是您的罪魁祸首。