2014-06-17 2 views
1

충돌 감지 기능을 제대로 작동 시키려고하지만 충돌 할 때 충돌 영역이 계속 움직입니다. 아무리 노력해도. 두 개의 물체가 있고 물체가 움직이며 적/물체를 따라갈 수있는 충돌 영역을 얻을 수 없습니다.움직이고 회전하는 물체 (직사각형 적)에 대한 LibGDX 충돌 감지

나는 아래의 방법을 사용하여 충돌이 작동하고 적을 적절히 따르지 않는지 확인하고 있습니다.

enemy class extends sprite { 

위의 예는 스프라이트 확장자를 사용하는 예입니다.

object/enemy가 libgdx의 스프라이트 인 경우 클래스는 스프라이트로 확장됩니다.

shapeRenderer.begin(ShapeType.Filled); 
shapeRenderer.setColor(Color.RED); 

shapeRenderer.rect(rect1.getX() + (rect1.getWidth()/2), rect1.getY() + (rect1.getHeight()/2) - 2, rect1.getOriginX() - 1, rect1.getOriginY() - 4, 1.0f, 1.0f, rect1.getRotation()); 

shapeRenderer.rect(rect2.getX() - 10, rect2.getY() - 10, rect2.getWidth() - 10, rect2.getHeight() - 10, rect2.getOriginX(), rect2.getOriginY(), rect2.getRotation()); 

shapeRenderer.end(); 

이 적 수준의 충돌 체크

rect.set(getX() + (getWidth()/2), getY() + (getHeight()/2) - 2, getOriginX() - 1, getOriginY() - 4); 

이 적을

public boolean collides(Ball ball) { 
    if (getX() < ball.getX()) { 
    return (Intersector.overlaps(ball.getRect1(), rect)); 
    } 
    return false; 

충돌하는 경우

어떤 도움이 정말 좋은 것} 보는 것입니다이다. 감사합니다.

답변

0

문제를보기에는 너무 명확하지 않지만 두 개의 사각형이 충돌 하는지를 확인할 수 있도록하려면 Intersector 클래스를 사용할 수 있습니다.

if(Intersector.overlaps(rectangle1, rectangle2) { 
     // Do here whatever you want. 
} 

반원은 물론 원과 다각형으로 작업 할 수 있습니다. 나는 이것을 Actor 클래스에서 오버라이드 한 act 메쏘드에 넣는다. 스테이지를 사용하지 않는다면 렌더 메소드에서이를 확인할 수 있습니다.

+0

코드를 편집했습니다. –

+0

안녕하세요 johnny-b. 두 직사각형이 겹치면 맞을 경우 Intersector는 true를 반환합니다. 당신이 맞지 않으면 사각형이 정확한지 확인하십시오. 당신은 ShapeRenderer ball.getRect1()과 rect를 사용하여 렌더링 할 수 있으며 사각형이 정확한지 확인하십시오. 나는 당신이 직사각형을 상쇄하고 있음을 볼 수 있습니다. 그러나 이것은 당신이 당신의 게임 논리에서 달성하고자하는 것에 달려 있습니다. – z3n105

+0

글 머리 기호는 둥근 모양의 총알 모양과 비슷합니다. 그래서 사각형 내부를 충돌 감지 영역으로 만들고 전체 사각형을 덮으려는 전체 스프라이트가 아닙니다. 이것은 영역이 충분히 커버하므로 총알이 덮여 있고 그것을 죽일 touch() 메소드를 구현하려고합니다. 그래서 사각형 영역을 터치하면 꺼내집니다. 그게 더 명확하면 ?? –