2017-09-26 1 views
0

저는 libgdx 및 게임 개발자에게 매우 익숙합니다. 필자는 직사각형 충돌 감지 기능이 이미 구현 된 매우 간단한 2D 게임을 제공받는 임무를 부여 받았다.매우 간단한 2D 게임에서 libgdx 픽셀 충돌.

게임은 벽에있는 다른 흩어져있는 사각형이있는 플레이어 내부에서 제어 할 수있는 사각형으로 구성됩니다. 이제 플레이어 사각형과 흩어져있는 사각형/벽 사이에 완벽한 픽셀 충돌을 구현해야합니다.

원래 Pixmap을 사용하여 시도해 보았고 현재 좌표의 픽셀이 플레이어 직사각형에 대해 투명하고 어느 사각형이 충돌하고 있지만 코드를 올바르게 구현하는 데 문제가 있는지 확인하려고했습니다.

특정 좌표에서 두 개체의 픽셀 색을 확인하고 충돌이 발생할 수 있도록 둘 다 투명하지 만 문제가 발생하는지 확인해야한다는 것을 이해합니다. 나는 매우 오랜 시간을 연구하고 온라인으로 보았습니다. 그래서 이것을 실행하는 방법에 대한 조언이나 조언은 대단히 감사하겠습니다!

public boolean entityCollision(Entity e1, Direction direction, float newX, float newY) { 
    boolean collision = false; 

    for(int i = 0; i < entities.size(); i++) { 
     Entity e2 = entities.get(i); 

     if (e1 != e2) { 

      if (newX < e2.x + e2.width && e2.x < newX + e1.width && 
       newY < e2.y + e2.height && e2.y < newY + e1.height) { 
       collision = true; 

       int colorOne = player.getPixel((int)newX,(int)newY); 
       int colorTwo = enemy.getPixel((int)e2.x,(int)e2.y); 

       if (colorOne != 0 && colorTwo != 0) { 
        collision = true; 
        e1.entityCollision(e2, newX, newY, direction); 
       } 
      } 
     } 
    } 

    return collision; 
} 

답변

1

libgdx의 the Rectangle implementation을 살펴보십시오. 당신이 스프라이트와의 충돌을 원하는 경우에

Rectangle e1Rec = new Rectangle(e1.x, e1.y, e1.width, e1.height); 
Rectangle e2Rec = new Rectangle(e2.x, e2.y, e2.width, e2.height); 

if (e1Rec.contains(e2Rec)) { 
    // Collision! 
} 
+0

고맙습니다! .contains() 메서드 대신 .overlaps() 메서드를 사용하여 작업을 수행 할 수있었습니다. –

0

, 당신은 스프라이트 사각형을받을 수 있도록 사각형의 내부의 충돌을 확인 : 그것은 당신이 이런 일을 수행 할 수 있습니다.

sprite.getboundingrectangle().contains(x, y) ; //returns a boolean 
관련 문제