当前位置: 首页 > 知识库问答 >
问题:

如何让一个对象在Java中自我删除?[副本]

仲承福
2023-03-14

好的,所以我正在开发一个小游戏,关于弹起一个球来击中敌人和力量。我让球在墙上、敌人和球员身上移动和弹跳,但我不能让能量在被球碰到时消失。

我读过几篇提出类似问题的线程,并尝试了所有建议的解决方案:将power-up对象设置为null,用remove()将其从存储在其中的ArrayList中删除,将其位置存储在ArrayList中以便以后使用此位置删除。我甚至尝试建立一个ID系统,通过使用它的唯一ID将其从ArrayList中删除。但结果总是一样的:当球打到上电时,游戏冻结,并抛出一个ConcurrentModificationException。

(对于ArrayList PowerUps中的每次加电,下面的PowerUp类中的tick()方法每秒调用60次;getBounds()返回一个带有实体坐标和尺寸的矩形,它工作得很好)。

public class Game {

    public static ArrayList<PowerUp> powerups = new ArrayList<PowerUp>();

}

public class PowerUp {

    public void tick(){
        if(this.getBounds().intersects(Game.gameBall.getBounds())){
            this.activate();
        }
    }

    private void activate(){
        //do whatever
        //delete this from the game
        Game.powerups.remove(this);//this is what I tried first
    }
}

那么,我如何删除加电而不得到那个该死的例外呢?

共有1个答案

糜凯泽
2023-03-14

这是因为您正在从列表中删除一个对象,同时对其进行迭代。改用CopyOnWriteArrayList:

public class Game {

    public static List<PowerUp> powerups = new CopyOnWriteArrayList<PowerUp>();

}

public class PowerUp {

    public void tick(){
        if(this.getBounds().intersects(Game.gameBall.getBounds())){
            this.activate();
        }
    }

    private void activate(){
        //do whatever
        //delete this from the game
        Game.powerups.remove(this);//this is what I tried first
    }
}
 类似资料:
  • 我有一个像这样的数据框 我希望能够在冬季移除所有的行,所以看起来像这样

  • 问题内容: 我想快速删除最后一个对象。 我知道这需要个,但是我想知道是否可以在恒定时间内执行此操作,因为我只想删除 最后一个 对象? 问题答案: 请参阅的文档,如以下语法所示: 这是它的实现方式。确实背衬阵列上的查找(因此它可以切断它从阵列松),这应该是恒定的时间(因为JVM知道一个对象引用的大小,它可以计算偏移量的条目的数量),并且是用于这个案例:

  • 我正在使用javascript定义对象数组,并希望根据对象属性删除值。 我用了下面的代码: 预期结果:当我删除值时,它应该给我一个包含0个元素的数组。 实际输出:当我删除值时,我得到的数组有1个元素,元素值为null。

  • 我正在尝试从对象数组中删除属性。 我希望var2包含这样的内容。 是否有方法将/cast转换为上述内容?换句话说,我想从对象数组中删除,并将其分配给。我该怎么做?

  • 假设我有一个雇员对象列表,每个雇员类都有雇员姓名、雇员地址、工资等属性。现在我必须删除名称为“John”和Salary的雇员对象 列表empList=new ArrayList 根据我的理解,若要解雇具有上述情况的员工,我应使用以下代码: 因此,基本上上述代码将从列表中删除所需的Employee对象。如果我的理解正确,请告诉我。 除此之外,请澄清以下几点:1.当我们有数百万条记录时,我们将如何解决

  • 问题内容: 假设我有以下结构: 如果我将该结构作为对象 如果我将此对象设置为nil 它不起作用,实际上是类型分配错误,但适用于映射和切片。那么,我将如何删除该对象(即取消分配)呢?我查看了内置的delete文档,但它从给定的映射中删除了一个条目。谢谢。 问题答案: Go是一种垃圾收集语言。您不应该这样做,也不能从内存中删除对象。这样做是垃圾收集器的 职责 和 责任 ,并且它是 自动执行的 。当对象