java - 在 libgdx 中绘制 Sprite

标签 java libgdx sprite

调用时出现 NullPoinerExecption

enemy.getSprite().draw(batch);

我必须在哪里初始化我的 Sprite ? 它在主类中工作,但如果我尝试在 Enemy 构造函数中初始化纹理和 Sprite ,则会出现错误。

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

敌方等级

 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 中的纹理和 Sprite 永远不会被实例化。在 create() 方法中调用 enemy.create()。或者简化一下,将 enemy.create() 中的代码移至 Enemy 构造函数中。

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

关于java - 在 libgdx 中绘制 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31166705/

相关文章:

eclipse - 找不到LibGDX + Gradle + Maven对Tween Engine的引用

Mobile Browser上的CSS Sprite Animation问题(残图)

python - Pygame 如何使用 LayeredUpdates() 更改图像层

java - 如何在保持旋转角度的同时使用补间 x,y?

java - 如何使用数组协调基于二维图 block 的游戏中的图形和逻辑位置?

java - 在测试期间阻止线程以检查其状态的最佳方法是什么?

java - BindingResult 和 bean 名称 'searchPhrase' 的普通目标对象都不能作为请求属性

java - .setForeground(Color.red);不工作\?

java - 如何让 im4java 与 BufferedImage 一起工作

java - libgdx,运动特定