我想我一直盯着这段代码太久了,我没有看到它。我正在编写一个小游戏,其中一部分会生成许多对象(当前为形状)。创建形状后,它们将作为类定义的对象添加到 ArrayList 中。我注意到随着形状数量的增加,重叠形状的机会增加,我想解决这个问题。我试图通过检查 ArrayList 中每个现有对象的 Y 坐标来检查 Y 坐标。但是在我的一生中,我不记得在生成唯一的 Y 值之前如何继续迭代检查函数。
我最初的解决方案是一个 do...while 循环,但由于某种原因它一直返回 true。
我稍微简化了我的代码,只保留了对我的问题至关重要的部分。我错过了什么?提前感谢您的帮助。
编辑:还要记住,随着游戏的进行,对象会不断地添加到 ArrayList 中或从 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;
}