有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java试图在没有任何重叠的JavaFX的情况下随机化节点的位置

我创建了一个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); 
}   

}


共 (1) 个答案

  1. # 1 楼答案

    您可以添加一个标志,当标志为真时,继续循环,直到没有重叠。这可能不是最有效的方法,但应该有效。i、 e

    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;
             }
    
         }   
    }