我正在尝试创建一个简单的BreakOut克隆,以使我熟悉LibGDX和scene2d。然而,在组装一个非常基本的例子以让我自己开始之后,我得到了一个非常明确定义的对象的NullPointerException。getX()调用的NullPointerException(Scene2d + Libgdx)
我有一个名为Paddle的Actor类,它在我的程序中调用了一个实例,简单地说就是paddle。它被声明为全局变量并在create()方法中初始化。当我运行该程序,它在我的渲染()在检查代码方法返回一个错误,如果桨是屏幕的范围之外:
// 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万一它有助于看看整件事。
编辑:我找到了答案多亏了评论: 我意识到什么posting-照顾像我重新定义了桨变量的范围(通过使用桨桨=新桨(我已立即错过... ))是本地方法而不是全局方法。因此,当它尝试访问该对象时,它总是返回null,因为该对象在create()方法之外不可访问。
如果您的演员在基本通话时无法正常工作,那可能是您的罪魁祸首。
如何分配paddle变量? – matsev
oi,哇。我正要粘贴实例并向您显示,但我意识到我已经在创建时重新定义了paddle变量的范围,因此它是本地的。不能相信我没有听到。感谢您的提醒。 – user1760501