【问题标题】:Drawing sprites in libgdx在 libgdx 中绘制精灵
【发布时间】:2015-07-01 16:18:52
【问题描述】:

调用时我得到一个 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);
    }

【问题讨论】:

    标签: java libgdx sprite


    【解决方案1】:

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

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

    【讨论】:

    • 调用enemy.create() 解决了这个问题。
    • 还将我的所有代码移至 Player 和 Enemy 构造函数。感谢您的帮助!
    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    相关资源
    最近更新 更多