在libgdx中绘制精灵

时间:2015-07-01 16:18:53

标签: java libgdx sprite

调用

时,我得到一个NullPoinerExecption
enemy.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);
    }

1 个答案:

答案 0 :(得分:1)

你从未在你的Enemy实例上调用过create(),所以Enemy中的纹理和精灵永远不会被实例化。在enemy.create()方法中致电create()。或者简化一些事情并将enemy.create()中的代码移动到Enemy构造函数中。

此外,在你的Enemy构造函数中,你实例化一个无用的Sprite实例,该实例不引用一个纹理,一旦create()被调用到敌人身上,它将被抛弃。并且构造函数甚至不使用传入的Sprite引用(尽管您当前只是传入null,因为SpaceShooter类中的spriteEnemy从未实例化。)