我试图删除我的世界中保存在ArrayList中的对象,但它不起作用

时间:2018-03-15 22:44:44

标签: java

我使用dyn4j物理引擎(虽然我不认为它与我的问题相关)。

我没有收到任何错误,但是如果我在其中一个对象上按下鼠标右键,它就不会删除该对象。

有谁知道可能是什么问题?

在这里,我将对象添加到我的世界:

public void mouseClicked(MouseEvent e) {

    double x = e.getPoint().getX()/100;
    double y = e.getPoint().getY()/100;

    if (addBlocks.isSelected()) {
        BodyFixture fblock = new BodyFixture(Geometry.createRectangle(1,1));
        dblock = new Body();
        if (e.getButton() == MouseEvent.BUTTON1) {
            dblock.addFixture(fblock);
            dblock.getTransform().setTranslation(x,y);
            dblock.setMass(MassType.NORMAL);
            dblock.getFixture(0).setRestitution(0.3);
            world.addBody(dblock);
            gameObjects.add(new GameObject("dirtblock.png", dblock, new Vector2(0, 0), 0.8));
        }
    }
}

在这里,我试图删除它们:

if (e.getButton() == MouseEvent.BUTTON3) {
    for (int i = 0; i < gameObjects.size(); i++) {
        if (gameObjects.get(i).contains(e.getPoint())) {
            world.removeBody(gameObjects.get(i).body);
            gameObjects.remove(i);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

通常当您在循环中删除带索引的项目时,由于索引更改而在集合末尾开始循环,请尝试:

if (e.getButton() == MouseEvent.BUTTON3) {
    for (int i = gameObjects.size() - 1; i >= 0 ; i--) {
        if (gameObjects.get(i).contains(e.getPoint())) {
            world.removeBody(gameObjects.get(i).body);
            gameObjects.remove(i);
        }
    }
}