2011-11-02 2 views
1

그래서 Blob 모양이있어서 MoveableShape를 구현합니다.두 도형이 만진 사건을 알리는 방법은 무엇입니까? Java

public interface MoveableShape 
{ 
    void draw(Graphics2D g2); 
    void translate(int dx, int dy); 
} 

Blob의 인스턴스 인 b1이 다른 Blob 인 b2에 도달한다고 가정 해 보겠습니다. 일단 그것이 다른 얼룩을 치면, 나는 그것의 방향을 반대로하고 싶다. 이 신호를 Java에서 어떻게 나타낼까요? 지금까지, 이것이 내가 일반적으로 이동하기 위해 뭘했는지 있습니다 :

Timer t = new Timer(DELAY, new 
    ActionListener() 
    { 
     public void actionPerformed(ActionEvent event) 
     { 
      b1.translate(1, 0); 
      label.repaint(); 
     } 
    }); 
    t.start(); 

을 그리고 나는 진심으로 오히려이와 그 여섯 번째와 일곱 번째 라인을 교체하는 것보다이 작업을 수행 할 수있는보다 효율적인 방법이 생각 :

b1.translate(speed, 0); 
label.repaint(); 
if(b1.getX()==b2.getX()) { speed = -speed } 

모든 세부 사항을 문서화하지 못해 사과드립니다. 그러나 그 내용에 대한 일반적인 요지를 찾아야합니다. 방향을 바꾸기 위해 b1에 사용자 지정 이벤트를 추가 할 수 있습니까? 게다가 ActionListener로이 작업을 수행 할 수 있습니까? 감사.

+0

2D 모양의 실제 충돌 감지가 필요합니까, 아니면 예제에서와 같이 X 좌표를 비교할만큼 충분합니까? 좌표 비교는 분명 훨씬 간단하지만, 방향을 바꾸기 전에 모양이 눈에 띄게 겹칠 수 있습니다. – eaj

+0

@eaj 후자는 괜찮습니다. 내 유일한 문제는 actionPerformed에서 반복적으로 실행되는 상수 if 문입니다. 또한이 클래스에는 .getWidth() 옵션이 있으므로 끝에 겹치지 않을 것입니다. (필자는 그 점을 비교에 포함시키는 것을 잊었습니다). – user977036

답변

0

도형이 충돌 할 때 물론 맞춤 이벤트를 실행할 수 있지만 충돌을 감지하는 코드를 작성해야합니다. 현재 접근 방식에 만족하지 않으면 Shape.intersects()이 도움이됩니다 (하위 클래스가 Shape 인 것으로 가정).

그러나 다른 청취자에게 충돌을 알릴 필요가 없으면 처리 할 다른 이벤트를 시작하는 데 아무런 소용이 없습니다. 애니메이션 코드로 작업하는 것이 합리적입니다.

충돌 검색이 성능에 영향을 미칠 정도로 복잡해지면 다른 스레드로 그 충돌을 셔플해야 할 수 있습니다. 당신이 그 특별한 합병증을 만날 가능성이없는 것처럼 들리지만.