怪物对象删除

Jes*_*sen 1 java object

简短介绍:我正在构建一个游戏,怪物在顶部产生,并通过一条路径移动到达需要移除/销毁/删除的点.但我似乎无法删除怪物对象.

for (Monster i : Monstre) 
    {
        this.add(i); //adds monster to JPanel

if(i.monstery > 50 && i.monsterx > 50){  //check if monster have reached end point

        this.remove(i); //Should remove Object from the JPanel ?
        i = null; //Sets object too null
        Monstre.remove(i); //Removes object from arrayList "Monstre".

}else{
//Update the monsters bounds
Run Code Online (Sandbox Code Playgroud)

上面从JPanel中删除了对象,看起来一切都很好.但是当我打电话给System.out.println(Monstre.size());我时会产生越来越多的怪物,并且如果增加怪物产生率,程序开始最终减速,因为Monstre arraylist中的怪物数量超过了9000,并且从未减少.我正在寻找的是一种在游戏运行时删除这些对象的方法.

dar*_*jan 7

删除该i = null;行.这不是C,您不必将变量分配给null.JVM会为你做这件事(google"java垃圾收集").由于这一行,你实际上调用Monstre.remove(null)哪个不起作用.

此外,您不能以这种方式迭代集合并修改它(删除值).将要删除的怪物保存在循环范围之外的数组中,并在循环结束后将其删除.否则,使用迭代器:

Iterator<Monster> it= Monstre.iterator(); 
while (it.hasNext()) {
    Monster i= it.next();
    //code code code
    if (shouldDelete) {
        this.remove(i);
        it.remove();
    }
}
Run Code Online (Sandbox Code Playgroud)