libGDX で scene2D を学習し、nullPointerException に遭遇し続けるために、小さなプロジェクトを開始しました。私の目標は、アクション シーケンスを使用してプレーヤーをジャンプさせることです。私の問題は、プレイヤーがジャンプアップすることですが、一度落ちるとゲームがクラッシュします。問題を引き起こしていると思われるコードの一部を含めました。私はまだ libGDX と scene2d にかなり慣れていないので、setX() setY() メソッドと setPosition(x,y) メソッドの違いが問題を引き起こしている可能性があることに慣れていません。
また、正確に delta と parentAlpha が何であるか、およびそれらを正しく使用する方法についてもう少し知りたいです
私が得るエラー
Exception in thread "LWJGL Application" java.lang.NullPointerException
at com.badlogic.gdx.scenes.scene2d.actions.MoveToAction.begin(MoveToAction.java:26)
at com.badlogic.gdx.scenes.scene2d.actions.TemporalAction.act(TemporalAction.java:48)
at com.badlogic.gdx.scenes.scene2d.actions.SequenceAction.act(SequenceAction.java:65)
at com.badlogic.gdx.scenes.scene2d.Actor.act(Actor.java:85)
at com.chiefpeanut.noodle.Tony.act(Tony.java:48)
at com.badlogic.gdx.scenes.scene2d.Group.act(Group.java:48)
at com.badlogic.gdx.scenes.scene2d.Stage.act(Stage.java:225)
at com.chiefpeanut.noodle.GameScreen.render(GameScreen.java:54)
at com.badlogic.gdx.Game.render(Game.java:46)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:207)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114)
私のプレーヤークラスの重要な部分
public class Tony extends Actor{
public Rectangle bounds;
public float posX;
public float posY;
MoveToAction jumpUp;
MoveToAction jumpDown;
public Tony() {
posX = 10f;
posY = 10f;
bounds = new Rectangle();
setHeight(100);
setWidth(100);
//scale(1, 1);
setPosition(10, 10);
setX(10f);
setY(10f);
setPosition(10, 10);
jumpUp = new MoveToAction();
jumpUp.setPosition(10, 80);
jumpUp.setDuration(2f);
jumpDown = new MoveToAction();
jumpDown.setPosition(10, 10);
jumpDown.setDuration(2f);
}
public void act(float delta){
super.act(delta);<<--------SHOWS ERROR OCCURRING HERE------
updateBounds();
}
public void jump() {
addAction(Actions.sequence(jumpUp, jumpDown));
}
public void draw(SpriteBatch batch, float parentAlpha){
batch.draw(Assets.textureTony, getX(), getY(), getWidth(), getHeight());
}
}
私の GameScreen クラスの重要な部分については、
public class GameScreen implements Screen, GestureListener {
MyGame game;
OrthographicCamera camera;
static SpriteBatch batch;
Stage stage;
Tony player;
Array<Block> blocks;
public GameScreen(MyGame game) {
this.game = game;
camera = new OrthographicCamera();
camera.setToOrtho(false, 1920, 1080);
camera.update();
player = new Tony();
batch = new SpriteBatch();
stage = new Stage(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
stage.addActor(player);
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(1F, 1F, 1F, 1F);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
batch.setProjectionMatrix(camera.combined);
stage.act(delta);//<<----SHOWS ANOTHER ERROR OCCURRING HERE-------
stage.draw();
System.out.println("rendered");
if(Gdx.input.isKeyPressed(Keys.W)){
player.jump();
}
if(Gdx.input.isKeyPressed(Keys.D)){
//player.testMove();
System.out.println(player.getX());
}
}
@Override
public void resize(int width, int height) {
}
@Override
public void show() {
Gdx.input.setInputProcessor(new GestureDetector(this));
}
@Override
public void hide() {
Gdx.input.setInputProcessor(null);
}
}
私は自分のレンダリングを間違って使用していると思い始めました.5つの異なるチュートリアルから離れているので、これはおそらく正しいです.しかし、スタックトレースのMoveToAction.java:26エラーをクリックすると、Thisの26行目が表示されます.「startX = actor.getX();」という行にエラーがあるドキュメント (github 上) 私は非常に混乱しており、何日もさまざまなことを試していて、何が間違っているのかを突き止めようとしています.
ご助力ありがとうございます