【问题标题】:Java game throwing IndexOutOfBoundsException with 2 arraylists?Java 游戏用 2 个数组列表抛出 IndexOutOfBoundsException?
【发布时间】:2014-10-19 02:27:50
【问题描述】:

我正在用 java 制作一个相当简单的游戏,并且我不断从我的数组列表中获取这个 IndexOutofBoundsException。我有一个创建“子弹”的数组列表,另一个存储“导弹”。程序运行,我可以发射子弹约 5 秒钟,然后它冻结给我这个错误。我不确定发生了什么。

这是创建数组列表的 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();  
}

这里是我的工艺课程的一部分,其中包含导弹的动作。我在上面声明了它们,当我只有导弹部件时,代码运行良好。当我添加第二个数组列表时出现错误。

 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));
}

【问题讨论】:

  • 你能提供堆栈跟踪吗?
  • 感谢您的输入,但实际上我只是发现了错误。

标签: java arraylist indexoutofboundsexception


【解决方案1】:

我至少发现了一个错误:

else ms.remove(b);

应该是

else bs.remove(b);

【讨论】:

  • 谢谢,我刚刚发现并修复了它。
  • 你现在还收到异常吗?
猜你喜欢
  • 2020-05-11
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
  • 2011-02-10
相关资源
最近更新 更多