LibGDXとscene2dに慣れるために、単純なBreakOutクローンを作成しようとしています。ただし、非常に基本的な例を組み立てて自分自身を開始した後、非常に明確に定義されたオブジェクトでNullPointerExceptionが発生します。
私のプログラムには、パドルと呼ばれるインスタンスを持つパドルと呼ばれるActorクラスがあります。これはグローバル変数として宣言され、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)
そして、これがパドルクラスです。
public class Paddle extends Actor {
TextureRegion region;
public Paddle(){
region = new TextureRegion(new Texture(Gdx.files.internal("paddle.png")), 800/2 - 200 /2, 20);
}
}
全体を見るのに役立つ場合のコードを次に示します。
編集:コメントのおかげで答えを見つけました:投稿直後に見逃していたことを認識しました-パドル変数のスコープを(パドルパドル=新しいパドル(...)を使用して)ローカルに再定義したようですグローバルではなくメソッド。したがって、オブジェクトにアクセスしようとすると、create()メソッドの外部ではオブジェクトにアクセスできなかったため、常にnullが返されました。
アクターが基本的な呼び出しで正しく機能しないという問題が発生している場合は、それが原因である可能性があります。