2013-03-01 102 views
2

嗨我有一個子彈對象數組。我有子彈對象isAlive var設置爲false。 如果我不點擊空格按鈕(會觸發項目符號)而運行代碼,並打印出數組對象isAlive var,並將它們全部打印爲假(應該如此)。未正確設置數組元素

如果我點擊空格按鈕一旦子彈出現在屏幕上並正確移動,但是當我打印出顯示isAlive var的子彈數組時,它們都被設置爲true,並且具有相同的x/y位置。如果單擊空格按鈕兩次2個子彈出現並正常行進,但是當我打印數組時,它顯示前十個元素爲活着的,具有相同的x/y位置(屏幕上的第一個子彈),接下來的十個元素也活着,具有相同的x/y位置(屏幕上的第二顆子彈)

再次按下空格鍵不會添加新的子彈。 這裏;公司爲fireButton()的代碼

public void fireBullet(){ 
    if(currentBullet > BULLETS -1){ 
     currentBullet = 0; 
    } 
    if(bullet[currentBullet].isAlive()==false){ 
     bullet[currentBullet].setAlive(true); 
     bullet[currentBullet].setxPos(ship.getxPos()); 
     bullet[currentBullet].setyPos(ship.getyPos()); 
    } 
    currentBullet ++; 
} 

,並在這裏的是其在KeyPressedMethod稱爲

case KeyEvent.VK_SPACE: 
     fireBullet(); 
     break; 

任何人都可以看到我要去哪裏錯是與代碼搞亂?一段時間了,它在我的腦海裏:)

編輯:我會回答所有的問題,如果我可以在這裏:) 1)currentBullet是一個私人類成員,並初始化爲0,然後在每個b的fireBullet()方法中增加比奇山友燒製到20,然後復位爲0。

2)當我iniatilise子彈陣列I分配一個新子彈()到每個element.Each子彈構造函數設置的IsAlive到假

3)子彈VAR的IsAlive被設置爲false,當它離開屏幕 4)這裏的的keyPressed方法完全

public void keyPressed(KeyEvent k) { 
    int keyCode = k.getKeyCode(); 

    switch (keyCode) { 

    case KeyEvent.VK_A: 
     //move ship left 
     if(ship.getxPos()<20){ 
      ship.setxPos(20); 
     }else 
     ship.setxPos(ship.getxPos()-1); 
     break; 
    case KeyEvent.VK_D: 
     if(ship.getxPos()>1260){ 
      ship.setxPos(1260); 
     }else 
     ship.setxPos(ship.getxPos()+1); 
     break; 
    case KeyEvent.VK_SPACE: 
     fireBullet(); 
     break; 
    } 


}//end keypressed event 

我認爲渲染是好的,因爲它是繪製子彈,但在上面畫他們的10,二彼此,所以當代碼運行時,你只能看到兩顆子彈在屏幕上移動,

問題是,每個空格鍵按下時應該只有一個活着的子彈,但是一旦所有20個子彈都被設置爲活動,就按下它。

第二次編輯:我在遊戲循環結束時打印出當前項目符號,它似乎正確遞增,表明fireBullet()方法正在每個空格鍵上被調用,似乎正在填充活動項目符號的數組每次按

+1

你能向我們展示你的'keyPressed'方法嗎? – NPE 2013-03-01 15:26:11

+1

另外,嘗試在'fireBullet()'開始時打印出一條消息,並且每次按空格鍵時看看該方法是否只被調用一次。 – NPE 2013-03-01 15:26:58

+0

和你如何設置currentBullet? – 2013-03-01 15:27:30

回答

0

感謝所有這些工作!就像上面提到的NPE一樣,我在fireBullet()methosd和另外兩個按鍵中放了一個小的println。發生的事情是我在代碼挑選時觸及空間大量的「點擊」。原來我在我的paint方法中添加了addKeyListener(this),而不是在JFrame的構造函數中,老實說不知道它是如何放在繪製方法中:)