我已经创建了一个for循环来将我的所有节点添加到根目录中,但由于它们的位置是随机的,因此它们中的一堆最终会重叠。
我添加了一个for循环来移动一个节点,如果它与另一个节点重叠,虽然它并没有真正解决问题,因为它可能只是与另一个重叠。
任何人都知道最终没有重叠节点的好方法吗?
这是我的代码:
for (int i = 0; i < citiesText.length; i++) {
citiesText[i] = new Text(cities[i][0]);
citiesText[i].setFont(Font.font("Impact", 40));
citiesText[i].setFill(Color.WHITE);
citiesText[i].setStrokeWidth(2);
citiesText[i].setStroke(Color.BLACK);
double height = citiesText[i].getBoundsInParent().getHeight();
double width = citiesText[i].getBoundsInParent().getWidth();
double maxX = 1000 - width;
double maxY = 550 - height;
root.getChildren().add(citiesText[i]);
citiesText[i].relocate(Math.random()*maxX, Math.random()*maxY);
for (int j = 0; j < i; j++) {
if (citiesText[i].getBoundsInParent().intersects(citiesText[j].getBoundsInParent()))
citiesText[i].relocate(Math.random()*maxX, Math.random()*maxY);
}
}
答案 0 :(得分:0)
你可以添加一个标志,当标志为真时保持循环,直到没有重叠。这可能不是最有效的方法,但应该有效。即。
boolean overlap = true;
while(overlap){
overlap = false;
for (int j = 0; j < citiesText.length; j++) {
if(citiesText[i].getBoundsInParent().intersects(citiesText[j].getBoundsInParent())){
citiesText[i].relocate(Math.random()*maxX, Math.random()*maxY);
overlap = true;
}
}
}