2014-11-25 3 views
0

내 게임에서 직사각형을 사용하여 충돌 감지를 구현하려고하지만 작동하지 않는 것 같습니다.충돌 감지 Libgxx 사각형

글 머리 기호는 각 프레임마다 간격을 두어 화면을 가로 질러 이동할 때 업데이트됩니다. 명백하게 나는 여기에서 들었다. collisionbox는 그것과 함께 움직인다. 나는이 값을 각 인스턴스에 대해 datafield Rectangle을 설정하는 sprite.getBoundingBox()을 사용하여 이것을 얻는다.

두 명의 Arraylists가 있습니다. 하나는 Monsters 인스턴스이고 하나는 Bullets 인스턴스입니다. 그들은 모두 그들과 관련된 collisionRectangles를 가지고 있습니다.

총알이나 몬스터 arraylist에 뭔가있는 한 내 기본 렌더링 루프의 각 프레임에서 checkCollisions() 메서드를 호출합니다.

/*this handles collisions between bullets and enemies*/ 
public static void checkCollisions(){ 
    for (int i = 0; i < Main.currentBullets.size(); i++){ 
     for (int k = 0; k < Main.currentMonsters.size(); k++){ 
      if (Intersector.overlaps(Main.currentBullets.get(i).collisionBoxBullet, 
        Main.currentMonsters.get(k).collisionBoxMonster)){ 
        System.out.println("Boom headshot"); 
       } 
     } 
    } 

중복 될 때마다 붐 헤드 샷을 수행해야합니까? 대신에 항상 사실로 평가되는 것 같습니다.

왜 계속해서 사실인지 평가하고 붐 헤드 샷을 쓰고 있습니까?

+0

'sprite.getBoundingRectangle()'메서드는'Sprite'를위한'BoundingRectangle'을 생성합니다. 즉, 그것은 'Sprite'를 움직일 때 업데이트되는 참조가 아닙니다. 그래서'collisionBoxBullet'과'collisionBoxMonster'를 최신 상태로 유지하려면 매 프레임마다'sprite.getBoundingRectangle'을 호출해야합니다. 또한 '총알'과 '괴물'은 금식하지 않아서 서로를 "터널링"하지 않도록하십시오! – Springrbua

+0

대단히 감사합니다. 매번 경계 사각형을 업데이트하지만 항상 "붐 헤드 샷"을 말하고 실제로 평가합니다. 조건부 평가가 참인 이유는 무엇입니까? –

+0

말하기가 쉽지 않습니다 ...'if' 조건 앞에'System.out.println()'을 시도하고 2 개의 collisionBox를 출력하십시오. 그런 다음 몇 가지 검사 결과를 보여주십시오. – Springrbua

답변

0

내가하지 않은 것은 0.0에 있던 스프라이트의 사각형 위치를 설정하는 것입니다. 나는 또한 collisionBox.setPosition()으로 충돌 상자를 제대로 움직이지 않았다.

처음에는 0/0에있는 스프라이트가 0.0 인 충돌 상자와 충돌하는지 확인하기 때문에 항상 겹쳐서 표시됩니다.