我正在尝试制造多个射弹,好像宇宙飞船正在射击一个敌人

时间:2017-03-20 19:41:06

标签: java processing

我在空数组上使用append来创建多个射弹,但是每次我按空格键时我都会在keyPressed上检查空格键是否被按下时得到NullPointerException。我无法弄清楚为什么这是hapenning。帮助会非常好。

主要课程:

int naveX, naveY;
int inimigoX, inimigoY;
Tiro [] tiros;

boolean tiroVisivel;
boolean naveDireita, naveEsquerda;

void setup(){
  size (800, 600);

  naveX = 375; naveY = height - 120;
  inimigoX = 385; inimigoY = 0;

  tiroVisivel = false;
  naveDireita = naveEsquerda = false; 

}

void draw(){
  background (0);

  nave();
  movimentoNave();
  if (tiroVisivel == true && tiros != null){
    for (int i = 0; i < tiros.length; i++){
      tiros[i].display();
      tiros[i].update();      
    }
  }

  inimigo();
}

void nave(){
  stroke (255);
  fill (255, 0, 0);
  rect (naveX, naveY, 50, 100);
}

void movimentoNave(){
  if (naveEsquerda == true && naveX > 0){
    naveX = naveX - 5;
  }
  if (naveDireita == true && naveX < width - 50){
    naveX = naveX + 5;
  }
}

void inimigo(){
  stroke (255);
  fill (0, 100, 255);
  rect (inimigoX, inimigoY, 30, 50);
}

void keyPressed(){
  if (key == ' '){
    append(tiros, new Tiro(naveX + 20, naveY - 30));
    tiroVisivel = true;
  }

  if(key == 'a' || key == 'A'){
    naveEsquerda = true;  
  }
  if(key == 'd' || key == 'D'){
    naveDireita = true;
  }

  if (key == 'r' || key == 'R'){
    setup();    
  }
}

void keyReleased(){
  if(key == 'a' || key == 'A'){
    naveEsquerda = false;  
  }
  if(key == 'd' || key == 'D'){
    naveDireita = false;
  }    
}

PROJECTILE CLASS:

public class Tiro {

  private int tiroX = naveX + 20;
  private int tiroY = naveY - 30;

  public Tiro(int x, int y){
    this.tiroX = x;
    this.tiroY = y;
  }


  void display(){
    stroke (255);
    fill (255, 0, 100);
    rect (tiroX, tiroY, 10, 20); 
  }

  void update(){
    if (tiroY > 0){
      tiroY = tiroY - 10;
    }
  }
}

1 个答案:

答案 0 :(得分:0)

  

我在空数组上使用追加[...]

不,你不是。你的数组不是空的,它是uninitialized and therefore null 那是因为您 declared ,但从未 initialized 您的tiros数组:

Tiro [] tiros;

尝试按原样访问tiros将产生NullPointerException 要解决此问题,请在setup()

中添加此行
tiros = new Tiro[0];

请允许我提出这个不相关的建议:如果可以(并且看起来像你那样),请尝试用英语编码。它是行业的标准,当您寻求国际社会的帮助时,也会在这些情况下使您受益。