2014-10-19 4 views
-1

Я делаю довольно простую игру в java, и я продолжаю получать это IndexOutofBoundsException от моего arraylist. У меня есть 1, который создает arraylist из «пули», а другой, который хранит «промахи». Программа запускается, и я могу запускать пули в течение примерно 5 секунд, а затем она зависает, давая мне эту ошибку. Я не уверен, что происходит.Java игра бросает IndexOutOfBoundsException с 2 arraylists?

Это часть моего класса 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, который имеет действия для ракет. Я объявляю их выше, и код работал нормально, когда у меня были только части ракеты. Ошибка пришла, когда я добавил второго arraylist.

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

Можете ли вы предоставить StackTrace? – Victor2748

+0

Спасибо за ввод, но я на самом деле просто нашел ошибку. – Tiller

ответ

0

Я заметил одну ошибку, по крайней мере:

else ms.remove(b); 

должен быть

else bs.remove(b); 
+0

Спасибо, я только что нашел это раньше и исправил его. – Tiller

+0

Вы все еще получаете исключение сейчас? –

Смежные вопросы