2014-10-19 85 views
-1

我在java中製作了一個相當簡單的遊戲,我不斷從我的ArrayList中得到這個IndexOutofBoundsException。我有1個創建「子彈」陣列列表,另一個存儲「導引」。該程序運行,我可以發射子彈約5秒,然後凍結給我這個錯誤。我不確定發生了什麼事。Java遊戲拋出IndexOutOfBoundsException與2 arraylist?

這是我創建數組列表的Canvas類的一部分。

ArrayList ms = craft.getMissles(); 
    ArrayList bs = craft.getBullets(); 

    for (int i = 0; i < ms.size(); i++) { 
     Missle m = (Missle) ms.get(i); 
     g2d.drawImage(m.getImage(), m.getX(), m.getY(), this); 
    } 
    for (int b = 0; b < bs.size(); b++) { 
     Bullet a = (Bullet) bs.get(b); 
     g2d.drawImage(a.getImage(), a.getX(), a.getY(), this); 
    } 

    Toolkit.getDefaultToolkit().sync(); 
    g.dispose(); 
} 


public void actionPerformed(ActionEvent e) { 
    ArrayList ms = craft.getMissles(); 
    ArrayList bs = craft.getBullets(); 

    for (int i = 0; i < ms.size(); i++) { 
     Missle m = (Missle) ms.get(i); 
     if (m.isVisible()) 
      m.move(); 
     else ms.remove(i); 
    } 
    for (int b = 0; b < bs.size(); b++) { 
     Bullet a = (Bullet) bs.get(b); 
     if (a.isVisible()) 
      a.move(); 
     else ms.remove(b); 
    } 

    craft.move(); 
    repaint(); 
} 

這裏是我的Craft類的一部分,它有導彈的動作。我在上面聲明瞭它們,並且當我只有導彈部件時,代碼運行良好。當我添加第二個數組列表時出現錯誤。

public Craft() { 
    ImageIcon ii = new ImageIcon(this.getClass().getResource(craft)); 
    image = ii.getImage(); 
    missles = new ArrayList(); 
    bullets = new ArrayList(); 
    x = 1000; 
    y = 60; 
} 
private ArrayList missles; 
private ArrayList bullets; 
private final int CRAFT_SIZE = 85; 
private final int CRAFT_SIZE2 = 20; 

public void move() { 
    x += dx; 
    y += dy; 
} 

public int getX() { 
    return x; 
} 

public int getY() { 
    return y; 
} 

public Image getImage() { 
    return image; 
} 

public ArrayList getMissles() { 
    return missles; 
} 
public ArrayList getBullets() { 
    return bullets; 
} 

public void keyPressed(KeyEvent e) { 

    int key = e.getKeyCode(); 

    if (key == KeyEvent.VK_LEFT) { 
     dx = -2; 
    } 

    if (key == KeyEvent.VK_RIGHT) { 
     dx = 1; 
    } 

    if (key == KeyEvent.VK_UP) { 
     dy = -2; 
    } 

    if (key == KeyEvent.VK_DOWN) { 
     dy = 3; 
    } 
    if (key == KeyEvent.VK_SPACE) { 
     fire(); 
    } 
    if (key == KeyEvent.VK_V) { 
     fire2(); 
    } 

} 

public void fire() { 
    missles.add(new Missle(x + CRAFT_SIZE, y + CRAFT_SIZE/2)); 
} 

public void fire2() { 
    bullets.add(new Bullet(x + CRAFT_SIZE2, y + CRAFT_SIZE/2)); 
} 
+1

你能提供的堆棧跟蹤? – Victor2748 2014-10-19 02:29:38

+0

感謝您的意見,但我實際上只是發現了錯誤。 – Tiller 2014-10-19 02:32:53

回答

0

我發現至少一個錯誤:

else ms.remove(b); 

應該

else bs.remove(b); 
+0

謝謝,我剛剛發現並修復了它。 – Tiller 2014-10-19 02:34:13

+0

你現在仍然是例外嗎? – 2014-10-19 02:35:03

相關問題