繁体   English   中英

在libgdx中绘制精灵

[英]Drawing sprites in libgdx

我打电话时得到了NullPoinerExecption

enemy.getSprite().draw(batch);

我必须在哪里初始化我的精灵? 它在主类中起作用,但是如果我尝试在Enemy构造函数中初始化纹理和子画面,则会给我错误。

这是我的主要课程

  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中的纹理和精灵不会被实例化。 create()方法中调用enemy.create() 或简化事情,然后将敌人enemy.create()的代码enemy.create() Enemy构造函数中。

同样,在您的Enemy构造函数中,您将实例化一个无用的Sprite实例,该实例不引用Texture,一旦对敌人调用create() ,该实例将被丢弃。 而且构造函数甚至不使用传入的Sprite引用(尽管您现在无论如何都只是传入null ,因为spriteEnemy类中的spriteEnemy从未实例化)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM