2012-05-22 134 views
0

在這個遊戲中,我試圖讓多個激光產生在給定的座標上,但由於某種原因,每次numLasers大於1時,應用都會崩潰。我嘗試過所有事情,而且我真的可以使用一些幫助。Android遊戲產卵激光精靈

這裏是我的代碼:

public class LaserSpawn { 

    private int amountOfVisibleLasers; 
    private Context context; 
    private long timeLastCreatedLaser; 
    private Laser[] holderLaser; 

    public LaserSpawn(Context context, int numLasers){ 
     this.context = context; 
     holderLaser = new Laser[numLasers]; 

     this.amountOfVisibleLasers = numLasers; 
     for(int i = 0; i< numLasers; i++){ 
      holderLaser[0] = new Laser(context, -10, -10); 
     } 
    } 

    public void updatePlayerLaser(boolean shootLaser, float x, float y) { 
    // Check if a new Laser should be created 

    if(shootLaser == true) {  
     if(timeLastCreatedLaser + 100 < System.currentTimeMillis()) { 
      timeLastCreatedLaser = System.currentTimeMillis(); 
      boolean createdNewLaser = false; 

      for(int i = 0; i < this.amountOfVisibleLasers; i++) { 
       if(createdNewLaser == false) { 
        if(holderLaser[i].isDisposed()) { 
         this.generateNewLaser(i,x,y); 
         createdNewLaser = true; 

        } 
       } 
      } 
     } 
    } 

    // Update all the other Lasers 
    for(int i = 0; i < this.amountOfVisibleLasers; i++) { 
     if(holderLaser[i].isDisposed() == false) { 
      holderLaser[i].update(); 
     } 

    } 

} 

private void generateNewLaser(int i, float x, float y) { 
    holderLaser[i].setY(y); 
    holderLaser[i].setX(x); 
} 

謝謝!

+0

你應該看看logcat的,看看它爲什麼崩潰。你能找到併發布堆棧跟蹤嗎? – Tim

+0

如果我的答案有幫助並解決了問題,請點擊旁邊的勾號接受它 –

回答

3

我敢肯定,這是你的問題:

holderLaser[0] = new Laser(context, -10, -10); 

你永遠只能在你的數組的第一個位置創建一個new Laser。如果你嘗試訪問第二個,你會得到一個null pointer exception

它應該是這樣的

holderLaser[i] = new Laser(context, -10, -10); 
+0

對不起,我做了這個,它仍然只能用於1 :( – user1404512

+0

我從代碼中唯一可以看到的是如果holderLaser [i]沒有被實例化,它可能會在你的generateNewLaser()方法中崩潰。如果你給出了它的崩潰原因,那將會容易得多。你能編輯你的問題來包含LogCat輸出的崩潰位置這會有很大的幫助。 –