我想我一直在盯着这段代码太久,而我没有看到它。我正在写一个小游戏,其中的一部分会生成一些对象(当前的形状)。随着形状的创建,它们被添加到ArrayList中作为由类定义的对象。我注意到,随着形状数量的增加,重叠形状的机会增加,这是我想解决的。我试图通过检查Y坐标对阵ArrayList中每个现有对象的Y坐标来实现。但是对于我的生活,我记不起如何继续迭代检查函数,直到生成唯一的Y值。在检查ArrayList时继续生成值
我最初的解决方案是do ... while循环,但由于某种原因,它始终返回true。
我简化了我的代码,只是保留了对我的问题至关重要的部分。我错过了什么?预先感谢您的帮助。
编辑:另外请记住,随着游戏进行,对象会不断地从ArrayList中被添加和移除。每次在游戏中删除一个物体(形状)时,它都会被重新生成。这意味着对于游戏过程中创建的每个对象,都需要根据现有对象进行检查。
int x, y;
int numShapes = 10;
ArrayList<ShapeObject> soArray = new ArrayList<ShapeObject>();
private boolean checkY(int yy) {
for(int i = 0; i < soArray.size(); i++) {
if(soArray.get(i).oY == yy) {
return true;
}
}
return false;
}
public void makeShapes() {
for(int i = 0; i < numShapes; i++) {
if(soArray.size() < numShapes) {
x = rand.nextInt(width - 45) + 45;
do {
y = rand.nextInt(height - 4) + 2;
} while(checkY(y));
soArray.add(new ShapeObject());
}
}
}
class ShapeObject {
int oX = x;
int oY = y;
}
OY!那些是你得到的一些描述性变量名称 – 2012-08-08 20:39:49
如何使用[TreeSet](http://docs.oracle.com/javase/6/docs/api/java/util/TreeSet.html)与y坐标? – 2012-08-08 20:42:45
你的身高值可能太低。其余的“缩短”代码对我来说看起来很好。 – 2012-08-08 20:54:57