我在空数组上使用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;
}
}
}
答案 0 :(得分:0)
我在空数组上使用追加[...]
不,你不是。你的数组不是空的,它是uninitialized and therefore null
那是因为您 declared ,但从未 initialized 您的tiros
数组:
Tiro [] tiros;
尝试按原样访问tiros
将产生NullPointerException
要解决此问题,请在setup()
:
tiros = new Tiro[0];
请允许我提出这个不相关的建议:如果可以(并且看起来像你那样),请尝试用英语编码。它是行业的标准,当您寻求国际社会的帮助时,也会在这些情况下使您受益。