调用时出现 NullPoinerExecption
enemy.getSprite().draw(batch);
我必须在哪里初始化我的 Sprite ? 它在主类中工作,但如果我尝试在 Enemy 构造函数中初始化纹理和 Sprite ,则会出现错误。
这是我的主类(class):
public class SpaceShooter implements ApplicationListener {
private SpriteBatch batch;
private Texture texture;
private Sprite sprite, spriteEnemy;
private Player p;
private Enemy enemy;
@Override
public void create() {
p = new Player();
enemy = new Enemy(spriteEnemy);
float w = Gdx.graphics.getWidth();
float h = Gdx.graphics.getHeight();
batch = new SpriteBatch();
texture = new Texture(Gdx.files.internal("craft.png"));
sprite = new Sprite(texture);
sprite.setPosition(w/2 -sprite.getWidth()/2, h/2 - sprite.getHeight()/2);
// Adding enemy sprite
}
@Override
public void dispose() {
batch.dispose();
texture.dispose();
}
@Override
public void render() {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
// moving sprite left and right
batch.begin();
sprite.draw(batch);
enemy.getSprite().draw(batch);
batch.end();
}
敌方等级
public class Enemy {
private Sprite sprite;
private Texture texture;
boolean gameOver;
public Enemy(Sprite sprite){
this.sprite = new Sprite();
}
public Sprite getSprite(){
return sprite;
}
public void create() {
texture = new Texture(Gdx.files.internal("enemy.png"));
sprite = new Sprite(texture);
this.sprite.setPosition(100, 200);
}
最佳答案
您从未在 Enemy 实例上调用 create()
,因此 Enemy 中的纹理和 Sprite 永远不会被实例化。在 create()
方法中调用 enemy.create()
。或者简化一下,将 enemy.create()
中的代码移至 Enemy 构造函数中。
此外,在您的 Enemy 构造函数中,您正在实例化一个无用的 Sprite 实例,该实例不引用纹理,并且一旦对敌人调用 create()
,该实例就会被丢弃。而且构造函数甚至不使用传入的 Sprite 引用(尽管您当前只是传入 null
,因为 SpaceShooter 类中的 spriteEnemy
从未实例化)。
关于java - 在 libgdx 中绘制 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31166705/