简短介绍:我正在构建一个游戏,怪物在顶部产生,并通过一条路径移动到达需要移除/销毁/删除的点.但我似乎无法删除怪物对象.
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,并且从未减少.我正在寻找的是一种在游戏运行时删除这些对象的方法.
删除该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)
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |