Im空の配列に追加して複数の発射体を作成すると、私はスペースバーを押すたびにImがNullPointerExceptionをスペースバーが押された。なぜこのことが起こっているのか分かりません。ヘルプは本当に良いだろう。私は宇宙船が敵を撃っているかのように複数の発射体を作成しようとしています
MAIN CLASS:
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;
}
}
発射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;
}
}
}
どこに定義されているのかわかりません –
配列* tiros *を決して初期化しないので、そのプロパティにアクセスしようとすると* NullPointerException *が作成されます。初期値を割り当てる必要があります。 –
メソッド 'append'はどこでも宣言されていません。スタックトレースと、スタックトレース内の行とコードとの相関がないと、あなたを助けることは不可能です。問題を再現できるようにコードを投稿してください。 – alfasin