2017-03-20 2 views
0

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; 
    } 
    } 
} 
+1

どこに定義されているのかわかりません –

+2

配列* tiros *を決して初期化しないので、そのプロパティにアクセスしようとすると* NullPointerException *が作成されます。初期値を割り当てる必要があります。 –

+0

メソッド 'append'はどこでも宣言されていません。スタックトレースと、スタックトレース内の行とコードとの相関がないと、あなたを助けることは不可能です。問題を再現できるようにコードを投稿してください。 – alfasin

答えて

0

イム[...]

いいえ、あなたはそうではありません。あなたの配列は空ではなく、uninitialized and therefore nullです。
ますのでdeclaredだ 、決してinitializedあなたtiros配列:NullPointerExceptionをもたらすであるとしてtirosにアクセスしようとし

Tiro [] tiros; 


setup()にこの行を追加し、問題を解決するには、次の

tiros = new Tiro[0]; 

を、私にこの関係のないアドバイスを許可する:することができます(あなたが行うかのように見える)場合、英語でのコードにしてみてください。それは業界では標準的なものであり、国際社会からの援助を求める際にも、これらの状況であなたに利益をもたらすでしょう。

関連する問題