2017-09-07 61 views
0

我有一個動態的對象列表,需要將它們放置在中心對象周圍而不重疊。它們都是矩形形狀。我正在使用Java FX文本對象。將對象放置在居中對象周圍

如果我把在中心的第一對象與

int x =(int)(scene.getWidth() /2); 
int y =(int)(scene.getHeight() /2); 

如何定位它周圍的其他人沒有overlapping.There的N個對象數量。

我不確定如何檢測到碰撞,然後在檢測到碰撞後移動碰撞。

if collision = true { 
       translate x 30 px{ 
       if still true { 
       translate y 30{ 
       if still true{ 
       translate x -30 
       if still true{ 
       translate y -30{ 
       if still true { 
       start again but increase movement size by 20 each iteration 
       until collision free placement occurs. 


       x----->----x 
       |   | 
       ^  | 
       |   | 
       |   | 
       x----<-----x 

感謝

回答

0

要確定兩個矩形是否重疊,你可以創建它們的實例爲java.awt.Rectangle,然後調用intersects方法,看看他們是否重疊。您也可以使用intersection方法來計算您必須移動一個以確保與另一個不具有交點。

您也有過如何移動它們的問題。我的第一個想法是,你應該像LayoutManager那樣做。擴展父項並覆蓋layoutChildren()方法,並根據需要將它們放在那裏。它允許您在計算無碰撞的佈置後爲矩形設置絕對座標。

如果您必須始終檢查與其他所有其他矩形的交點,此算法的計算量會很大。也許你想看看像FlowPane這樣的LayoutManager來優化。 FlowPane會將對象排列成一行,直到邊界,然後分解到下一行。 (或垂直方向的列)

如果您不能使用LayoutManager,還有其他方法可以優化它,但我需要更多關於用例的信息來幫助您。根據使用情況,this question可以幫助您。