2017-12-16 5 views
1

이 문제에 대한 답변을 찾으려고했지만 많은 사람들이 원하는 것처럼 raycasting을 사용하지 않는 것 같습니다. 내 게임에 여러 배우가 있는데, 작은 로봇을 타고 순식간에 충돌 회피를 위해 소나 센서처럼 짧은 광선을 던지기를 원합니다.Libgdx Box2d Raycast는 여러 개의 광선을 전송할 수 없습니다.

저는이 액터 각각을 통해 루프를 실행하고 인터셉트 포인트와 법선을 유지하기 위해 전용 Vector2 변수를 사용하여 World에서 자신의 Raycaster를 호출합니다. 하나의 액터 만 있다면 잘 작동 합니다만, 레이 캐스터 함수가 하나의 인스턴스 만 갖고 있고, 이전 Raycaster 호출이 새 Raycaster() 호출을 사용하여 다른 객체에 의해 호출 되더라도 새 호출에 의해 오버라이드 된 것처럼 보입니다. . 따라서 내 목록에있는 마지막 배우 만 실제로 캐스팅 된 레이에서 정보를받습니다.

사람들이보고 한 이전의 문제는 단 하나의 광선에 불과했지만 순서를 정렬하려고했습니다. 너희들은 raycaster가 어떻게 작동하는지에이, 또는 통찰력을 달성하는 방법에 대한 조언이 있다면 그래서 주위에 방법을 알아낼 수

RayCastCallback callback = new RayCastCallback() { 
     @Override 
     public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) 
     { 
      ColP = point; 
      System.out.println("\nColpoint: "+ ColP.x+","+ColP.y+"with "+Type); 
      SurfNormal = normal; 
      dist = 1*fraction; 
      return 1; 
     } 
    }; Parent.world.rayCast(callback,p1,p2); 

: 여기

배우 중 하나 내부 raycasting 콜백입니다 이전 전화를 다시 작성하면 크게 감사하겠습니다.

+0

다른 반환 값을 사용해야 할 필요가 있습니까? 소스 코드 주석은 다음과 같이 말합니다 : "여러분은 float을 반환하여 레이 캐스팅이 어떻게 진행되는지 제어합니다 : 반환 -1 :이 조명기를 무시하고 계속하십시오; 0을 반환하십시오 : 레이 캐스트를 끝내십시오; 광선을 잘라내어 계속하십시오. "(여기에 맞게 편집 된 구두점 및 구두점 포함). –

+0

이것은 첫 번째 물체보다 더 많이 투과하는 한 개의 광선에만 영향을주기 때문에 그렇게 생각하지 않습니다. 저는 각 광선에 대해 0을 반환하고, 그것이 도달하는 곳에 짧은 법선 벡터를 그립니다. 그러나 실제로 광선을 투사하는 4 개의 광선 중 하나만이 실제로 반환됩니다. –

답변

1

알았어. 알아 냈어. 컨벤션이 내 질문을 편집하여 답변을 포함하는 것이라면 저에게 연락해주십시오. 문제는 각 객체가 고유 한 벡터를 가지고 있더라도 noob 오류를 만들었고 자바 프리미티브 만 참조로 제공되지 않는다는 사실을 잊어 버렸습니다. 해결책은 새로운 Vector2 (point)와 새로운 Vector2 (normal)를 호출하여 모든 벡터가 raycallback 함수 내부에 병합되지 않도록하는 것이 었습니다.

RayCastCallback callback = new RayCastCallback() { 
    @Override 
    public float reportRayFixture(Fixture fixture, Vector2 point, Vector2 normal, float fraction) 
    { 
     ColP = new Vector2(point); 
     System.out.println("\nColpoint: "+ ColP.x+","+ColP.y+"with "+Type); 
     SurfNormal = new Vector2(normal); 
     dist = 1*fraction; 
     return 1; 
    } 
}; Parent.world.rayCast(callback,p1,p2); 
+0

참고로 해답을 솔루션에 제출했습니다. –