我正在使用以下方法来尝试找到以前没有使用过的点(坐标),并且不在以前使用过的项目和坐标的范围内。
它的工作方式是我正在渲染“基础”(RTS 自上而下的游戏),并且我正在为 x 和 y 创建两个随机变量位置。我将这些与基础纹理一起传递到以下方法中。该方法循环通过一个矩形列表,这些矩形是每个先前渲染的基础的矩形。如果该点在任何矩形内,则使用一组不同的坐标再次调用该方法。它会这样做,直到找到不在矩形内的集合。然后它在这些坐标处添加一个新的矩形到列表中,并返回它们以便游戏可以渲染一个新的基础。
但是,基础仍然重叠。
这是方法:
private Point getCoords(int x, int y, Texture t){
for (int i=bases.size()-1; i> -1; i--) {
if (bases.get(i).contains(new Point(x,y))){
x = new Random().nextInt(map.getWidth() * map.getTileWidth());
y = new Random().nextInt(map.getHeight() * map.getTileHeight());
getCoords(x, y, t);
}
}
bases.add(new Rectangle(x,y,t.getImage().getWidth(), t.getImage().getHeight()));
return new Point(x, y);
}
这里是它被调用的地方:
switch(ran){
default:
int x = new Random().nextInt(map.getWidth() * map.getTileWidth());
int y = new Random().nextInt(map.getHeight() * map.getTileHeight());
Point p = getCoords(x, y, temp);
map.generateBase("air", p.x, p.y);
break;
}
任何想法这里有什么问题?
谢谢