调用
时,我得到一个NullPoinerExecptionenemy.getSprite().draw(batch);
我在哪里初始化我的精灵? 它适用于主类,但如果我尝试在Enemy构造函数中初始化纹理和sprite,那么它会给我错误。
这是我的主要课程:
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);
}
答案 0 :(得分:1)
你从未在你的Enemy实例上调用过create()
,所以Enemy中的纹理和精灵永远不会被实例化。在enemy.create()
方法中致电create()
。或者简化一些事情并将enemy.create()
中的代码移动到Enemy构造函数中。
此外,在你的Enemy构造函数中,你实例化一个无用的Sprite实例,该实例不引用一个纹理,一旦create()
被调用到敌人身上,它将被抛弃。并且构造函数甚至不使用传入的Sprite引用(尽管您当前只是传入null
,因为SpaceShooter类中的spriteEnemy
从未实例化。)