2016-12-07 3 views
0

JavaFX 응용 프로그램을 수행 중이고 여러 모양 (원과 직사각형)이 창에 추가되어 있습니다. 나는 원이 사각형을 가로 질러 움직이는 것을 원하지 않는다.JavaFX : 도형이 다른 도형 위로 끌 리지 못하도록합니다.

마우스 이벤트 (OnMousePressed, Dragged, Released)를 사용하여 원을 드래그 할 수 있지만 사각형은 움직일 수 없습니다.

이 코드를 사용하여 원이 사각형과 충돌하는 경우를 감지합니다.

private void checkIntersection(Shape block) { 
    boolean collisionDetected = false; 
    for (Shape static_bloc : nodes) { 
     if (static_bloc != block) { 
     Shape intersect = Shape.intersect(block, static_bloc); 

     if (intersect.getBoundsInLocal().getWidth() != -1) { 
      collisionDetected = true; 
     } 
     } 
    } 

    if (collisionDetected) { 
     System.out.println("Collision detected"); 
    } else { 
     System.out.println("Collision non deteted"); 
    } 
} 

내가해야 할 일은 내 원을 드래그하는 동안 끌기가 불가능하도록하는 것입니다. 그 모양을 원래 위치로 되돌리고 싶지 않습니다. intersect를 사용하여이 작업을 수행 할 수있는 방법이 있습니까?

+0

@jewelsea 연결하면 아무데도 연결되지 않습니다. – Sedrick

+0

@Sedrick, 감사합니다, 올바른 링크가 새 주석을 만들었습니다. 아마도 [Oracle Paper doll] (https://docs.oracle.com/javase/8/javafx/events-tutorial/paper-doll.htm) 드래그 앤 드롭 샘플을 공부하십시오. 비록 내가 추측하고 있긴하지만 정확하게 사용 케이스에 맞지 않습니다. 귀하의 질문은 서면으로 답변하기에는 너무 광범위하다고 생각합니다. 예를 들어, 사각형 위에 원을 드래그하면 어떤 일이 발생합니까? 사각형의 가장자리에서 원이 그려 집니 까? 원래 위치로 돌아갈 수 있습니까? – jewelsea

+0

@ jewelsea 도움을 주셔서 감사합니다. 조사해 보겠습니다. 원 모양이 사각형 모양을 입력하는 것을 원하지 않으므로 이론적으로는 응용 프로그램이 사각형 위로 원을 드래그하지 못하게해야합니다 (가능하지 않아야 함). 원래 위치로 돌아가거나 가장자리에 떨어 뜨리고 싶지 않습니다. 원하는대로 막히고 드래그하여 사각형 주위를 돌아 다니고 싶을뿐입니다. –

답변

0

대답하기가 쉽지 않습니다. 예를 들어 GameObject 클래스를 가질 수 있습니다. 이 클래스에는 Shape가 포함되어 있습니다. 이 GameObject 클래스에서는 드래그 로직이 &입니다. 그런 다음 모든 GameObject 목록이 포함 된 GameObjectManager 클래스를 갖게됩니다. 그리고 GameObject의 모든 인스턴스는이 GameObjectManager에 대한 참조를 가지므로 모든 GameObjects에 대해서도 알고 있습니다. 그래서 귀하의 이동 논리에서 특정 GameObject 유형 사이에 충돌이 있는지 확인할 수 있습니다. 이동하는 경우 중지 할 수 있습니다. 이 isInCollision 방법 루프 객체의 단지 일부 유형을 필요 귀하의 경우에는

protected boolean isInCollision() { 
    for (GameObject gameObject : gameObjectManager.getAllGameObjects()) { 
     if (!gameObject.equals(this)) { 
      if (getView().getBoundsInParent().intersects(gameObject.getView().getBoundsInParent())) { 
       return true; 
      } 
     } 
    } 
    return false; 
} 

: 충돌 평가 수준의 게임 오브젝트를 들어

는 방법과 같이 포함되어 있습니다.

관련 문제