2017-04-11 9 views
0

javafx에서 ImageView 객체와 Rectangle 간의 충돌을 감지하려고합니다. 아래 코드는 작동하지 않으며 이유가 확실하지 않습니다. 객체가 서로 겹치면 아무 일도 일어나지 않습니다. 이미지의 원래 파일은 차이가 나는 경우 png입니다. 이미지 뷰 객체는 화살표로 이동하고 직사각형은 TranslateTranslation으로 이동합니다.사각형과 이미지 뷰 객체 사이의 javafx 충돌을 감지하는 방법

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

이미지 뷰 이동 코드 :

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

getBoundsInLocal() 대신 getBoundsInParent()를 사용해보십시오.

일부 빠른 테스트 결과 로컬을 사용할 때는 BoundingBox이 두 개의 다른 위치간에 변경되지 않았지만 부모가있는 경우에는 변경된 것으로 나타났습니다. 이 사실은 getBoundsInParent()이 노드에서 변환을 사용한다는 사실에 기인합니다 (자세한 정보는 두 개의 Javadoc을 참조하십시오).

그러나이 방법이 교차 방법의 결과에 영향을 주는지는 테스트하지 않았습니다. 편집 : 더 많은 테스트를하기로 결정했습니다. 두 개의 덧셈을 RectangleStackPane에 추가하고 주변을 움직이면 "로컬"은 항상이 사실로 나타나고 "부모가 안된"것은 시각적으로 교차 할 때만 true로 나타났습니다. 왜냐하면 "로컬"에 관한 한 직사각형이 시작 위치를 벗어나지 않아서 항상 기술적으로 교차하기 때문입니다. 그러나 "부모님"은 StackPane 안에 진정한 위치를 나타 냈습니다.

+0

나는 그것을 시도했지만 여전히 작동하지 않았다. –

+0

흠 ... 나는 나의 사각형 중 하나를'ImageView'로 바꾸었고, 여전히 나를 위해 일했다 (나는 심지어 png 파일을 사용했다). 당신이 게시 한 새로운 코드를 보더라도 나는별로 다르지 않습니다. 코드에서 충돌을 검사하는 시점은 언제입니까? – Slaw

+0

사실,이 함수는 창이 열릴 때 한 번만 호출된다는 사실을 알게되었습니다. getBoundInParent()는 그 동안 한 번만 작동했습니다. 감사합니다. 프로그램이 지속적으로 충돌을 확인하는 방법을 알고 있습니까? start() 메서드에서 한 번 함수를 호출했습니다. –