2011-11-27 56 views
0

我期待爲Android製作一個簡單的太空入侵者類型射手,而且我很難讓子彈殺死敵人。我不太關心碰撞本身,但arrayList函數讓我感到困惑。我有一個子彈陣列和另一個壞人,他們各自的x和y位置。我試圖做到這一點,如果他們碰撞,相應的壞人消失。不幸的是,當我嘗試這樣做時,我收到了強制關閉,所以很難調試。下面是相關的代碼:試圖用ArrayList的子彈殺死一個ArrayList的badGuys

在Bullet.class:

public List<Placement> bulletsArray = new ArrayList<Placement>(); 
    public List<Placement> temp = new ArrayList<Placement>(); 
    public List<Integer> tempKill = new ArrayList<Integer>(); 

    public List<Integer> kill(List<Placement> badguys){ 
    for (int i = bulletsArray.size() ; i >= 0 ; i--){ 
     Placement bulletsBang = bulletsArray.get(i); 
     for (int j = badguys.size(); j >=0 ; j--){ 
      Placement badGuys = badguys.get(j); 
      if (bulletsBang.x == bulletsBang.y){ 
       if (badGuys.x == bulletsBang.x && badGuys.y == bulletsBang.y){ 
        tempKill.add(j); 
       } 
      } 
     } 
     //  tempKill.add(0); //Just using this to get something to work. 
     //  temp.add(bullets.get(i)); // should destroy the bullet when it hits. 
    } 
    return tempKill; 
} 

在World.class:

public void update(float deltaTime) { 
    if (gameOver) 
     return; 

    tickTime += deltaTime; 

    while (tickTime > tick) { 
     tickTime -= tick; 
     bullet.advance(); 
     bullet.deleteExtra(); 

     slowDown++; 
     if (slowDown == 2){ 
     badGuy.advance(); 
     slowDown = 0; 
     } 

     if (bullet.bulletsArray.size() > 0){ 
      badGuy.kill(bullet.kill(badGuy.badguys)); 
     } 
    } 
} 

在BadGuy.class;

public List<Placement> badguys= new ArrayList<Placement>(); 
    public BadGuy(){ 
     for (int i = 0 ; i < 8; i++){ 
      if (i% 2 == 0){ 
       badguys.add(new Placement(1 + i, 0));//creates 3 rows of bad guys. 
       badguys.add(new Placement(1 + i, 1)); 
       badguys.add(new Placement(1 + i, 2)); 
      } 
     } 
    } 
    public void kill(List<Integer> die){ 
      for (int i = die.size() ; i >= 0 ; i --){ 
     badguys.remove(die.get(i)); 
     } 
    } 

當我使用整數時,我可以得到壞道。但是我想返回arrayList來移除我接近力量的badguys。

+1

int i = bulletsArray.size(); i> = 0;我 - //這應該會引發異常 –

+0

它不會引發異常。它只是在for循環後面運行。如果我註釋掉 Placement bulletsBang = bulletsArray.get(i); 和 安置badGuys = badguys.get(j); 它不再強制關閉,所以我知道那不是問題。 編輯:我添加了一個編輯,以更充分地反映我的代碼。謝謝! – Funlamb

+1

好像它將執行循環大小()+ 1次。 –

回答

0

您的反向循環必須以size() - 1開始。 size()是最後一個元素的1,並且會拋出一個異常。

編輯

另外,我建議你的日常kill()返回List<Placement>,而不是指數的List<Integer>。這在概念上更簡單(至少對我來說,YMMV)並且BadGuy.kill()只是做一個removeAll()

+0

哇。我只是在處理我的代碼,Eclipse正在要求我將其更改爲List 。我會如何去做這樣的事情?我只是通過使用整數來擺脫這些傢伙。現在通過放置來實現它聽起來更難。你有任何示例代碼? (這更像是一個反問的問題,如果你已經提到它,我確信你有示例代碼) – Funlamb