在 libgdx 中绘制精灵

Drawing sprites in libgdx

我在调用

时收到 NullPoinerExecption
enemy.getSprite().draw(batch);

我必须在哪里初始化精灵? 它在 main class 中工作,但如果我尝试在 Enemy 构造函数中初始化纹理和精灵,那么它会给我错误。

这是我的主要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();
        }

敌人class

 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 中的纹理和精灵。在 create() 方法中调用 enemy.create()。或者简化事情并将 enemy.create() 中的代码移动到 Enemy 构造函数中。

此外,在您的 Enemy 构造函数中,您正在实例化一个无用的 Sprite 实例,该实例不引用纹理,一旦对敌人调用 create() 就会被丢弃。而且构造函数甚至不使用传入的 Sprite 引用(尽管您目前只是传入 null,因为 SpaceShooter class 中的 spriteEnemy 从未实例化)。