2017-04-11 24 views
0

我想檢測的ImageView對象和JavaFX的一個矩形之間的碰撞之間的JavaFX衝突。下面的代碼不起作用,我不知道爲什麼。物體重疊時沒有任何反應。如果這有所作爲,圖像的原始文件是PNG。 imageview對象用箭頭移動,矩形也用TranslateTranslation移動。如何檢測長方形和ImageView的對象

public void collision(ImageView a, Rectangle b) { 
    if (a.getBoundsInLocal().intersects(b.getBoundsInLocal())) { 
     b.setY(-100); 
     score++; 
    } 
} 

imageview的運動代碼:

playg.setOnKeyPressed(new EventHandler<KeyEvent>(){ 
     public void handle(KeyEvent event) { 
      if(event.getCode() == KeyCode.RIGHT) { 
       basket.setLayoutX(basket.getLayoutX() + 15); 
       brect.setLayoutX(basket.getLayoutX() + 15); 

      } else if (event.getCode() == KeyCode.LEFT) { 
       basket.setLayoutX(basket.getLayoutX() - 15); 
       brect.setLayoutX(basket.getLayoutX() - 15); 
      } 
     } 
    }); 

矩形動畫代碼:

TranslateTransition tt = new TranslateTransition(Duration.seconds(4), rect2); 
    tt.setByY(800f); 
    tt.setCycleCount(INDEFINITE); 
    tt.play(); 

回答

1

嘗試使用getBoundsInParent()代替getBoundsInLocal()

一些快速的測試表明使用本地當BoundingBox沒有兩個不同位置之間變化,但在父母使用時一樣。我猜這是由於getBoundsInParent()使用轉換的節點上(詳情參見兩者之間的Javadoc)。

但是,我沒有測試,如果這影響了交叉方法的結果。編輯:決定做更多的測試。增加兩個Rectangle s到一個StackPane和走動一個顯示「本地」 總是顯示「在父母」真當視覺上相交的僅表現爲真。這是因爲,就「本地」而言,矩形永遠不會離開它們的起始位置,這意味着它們在技術上始終相交。但是「內部」顯示了他們在StackPane內的真實位置。

+0

我試過了,但它仍然沒有奏效 –

+0

嗯...我改變了我的矩形之一的'ImageView',它仍然爲我工作(我甚至用一個PNG文件)。即使看看你發佈的新代碼,我也沒有太大的區別。你什麼時候在代碼中檢查碰撞? – Slaw

+0

其實我發現這個函數只在窗口打開時調用一次。 getBoundInParent()爲此工作一次,謝謝。你知道如何讓程序不斷檢查碰撞嗎?我在start()方法中調用函數一次 –