2015-07-01 5 views
0

Я получаю NullPoinerExecption при вызоверисования спрайтов в libgdx

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(); 
     } 

Enemy класс

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

Вы никогда не называли create() на вашем экземпляре Enemy, поэтому текстура и спрайт в Enemy никогда не инстанцирован. Позвоните по телефону enemy.create() в свой метод create(). Или упростите вещи и переместите код в enemy.create() в конструктор Enemy.

Кроме того, в конструкторе Enemy вы создаете бесполезный экземпляр Sprite, который не ссылается на текстуру и которая будет выброшена, как только create() будет вызван на врага. И конструктор даже не использует ссылку Sprite, которая была передана (хотя вы в настоящее время просто проходите в null, так как spriteEnemy в классе SpaceShooter никогда не создается).

+0

вызов функции enemy.create() устраняет проблему. – RomZes

+0

Также переместил весь мой код в конструкторы Player и Enemy. Спасибо за помощь! – RomZes

Смежные вопросы