2012-09-08 2 views
0

나는 움직이는 표적에서 총알을 발사하는 간단한 Java 게임을 가지고 있습니다. 두 개체 모두 GRect입니다. 나는 UFO와 총알이 서로 교차 할 때 확인 충돌 감지 기능을 가지고 있지만, 여기에 이상한 것들이다 :Java ufo 게임에서 충돌 감지

private void collideWithUFO() { 
    if (bullet != null) { 
     GObject collObj = getElementAt(ufo.getX(), ufo.getY()); 
     if (collObj == bullet) { 
      remove(ufo); 
      remove(bullet); 
      ufo = null; 
      bullet = null; 
     } 
    } 
} 

를 ..하지만 내가 다음과 같은 총알에 getElementAt를 변경하는 경우, 체크 :

이 작동

private void collideWithUFO() { 
    if (bullet != null) { 
     GObject collObj = getElementAt(bullet.getX(), bullet.getY()); 
     if (collObj == ufo) { 
      remove(ufo); 
      remove(bullet); 
      ufo = null; 
      bullet = null; 
     } 
    } 
} 

내가 처음 UFO 또는 총알을 선택하든 상관해야하지만, 분명히이되지 않습니다 : UFO와 관련하여,이 충돌을 감지하지 못합니다. 자, 이제 WEIRDER의 무언가가 있습니다. GRect에서 GOval로 총알을 변경하면 갑자기 두 번째 형태의 충돌 감지가 작동합니다. 저는 Java 놈입니다. 그래서이 행동이 이해가되는지 알려주세요. UFO가 최상위 그래픽 요소의 경우

답변

3
public GObject getElementAt(double x, double y) 

Returns the topmost graphical object that contains the point (x, y), or null if no such object exists. 

그래서 getElementAt(bullet.getX(), bullet.getY()) 만, 그렇지 않으면 당신은 총알을 얻을 것이다, 당신에게 UFO를 제공 할 것입니다.

+0

감사합니다. 이제 알 수 있습니다. 이것은 총알을 GRect에서 GOval로 바꾸면 UFO 객체 아래에도 놓이게됩니다. –