if(handler.obj.isEmpty())
handler.addObject(new Box(x, y, ID.Box));
else{
for(int i = 0; i < handler.obj.size(); i++){
Object tempObj = handler.obj.get(i);
if (tempObj.getX() == x && tempObj.getY() == y && tempObj.getId() == ID.Box)
handler.removeObect(tempObj);
else
handler.addObject(new Box(x, y, ID.Box));
}
}
else
语句中的handler.addObject()
似乎不可达或不工作
:
public class Handler {
LinkedList<Object> obj = new LinkedList<Object>();
public void tick(){
for (int i = 0; i < obj.size();i++){
Object tempObj = obj.get(i);
tempObj.tick();
}
}
public void render(Graphics g){
for (int i = 0; i < obj.size(); i++){
Object tempObj = obj.get(i);
tempObj.render(g);
}
}
public void addObject(Object obj){
this.obj.add(obj);
}
public void removeObect(Object obj){
this.obj.remove(obj);
}
}
让我们看看。假设第一次运行时,x,y
为1,1
。所以你加了Box(1,1)
下次运行时,假设x,y
为2,3
。因此,输入for
loop:
-
i = 0
:不相同的x,y
,所以输入else
,并添加Box(2,3)
。 -
i = 1
:与x,y
相同(是的,我们刚刚添加了它),所以输入if
并删除Box(2,3)
。
结果:再次添加和删除盒子。
哦,是的,调试器也会告诉你同样的事情。
您的问题是您的for
循环在错误的地方结束。这会导致两种不良症状。
- 首先,为列表中与不匹配的每个元素添加一次新的
- 其次,一旦到达循环结束,您将删除刚刚添加的一些新
Box
对象。
Box
,而不是只添加一次。我建议这样重写方法。注意for
循环是如何在添加新对象之前结束的——这确保了对象最多只添加一次。还要注意对象被删除后的return
语句——这可以做到,因为一旦对象被删除,该方法就没有更多的工作要做了。
public void addOrRemoveBox(int x, int y) {
for(int i = 0; i < handler.obj.size(); i++){
Object tempObj = handler.obj.get(i);
if (tempObj.getX() == x && tempObj.getY() == y && tempObj.getId() == ID.Box) {
handler.removeObect(tempObj);
return;
}
}
handler.addObject(new Box(x, y, ID.Box));
}
最后,您似乎已经编写了自己的类Object
(否则该代码将无法编译)。这可能是一个坏主意,因为它会使您混淆您的 Object
类和内置到Java中的Object
类。我建议你重命名这个类