답변:
콜린의 대답과 마찬가지로 b2World.Query ()는 유용한 함수입니다. aabb를 단일 점만 포함하도록 설정하면 해당 점과 겹칠 수 있는 객체 목록을 얻을 수 있습니다 . 그러나 속도 문제로 인해 바운딩 박스 (AABB) 만 겹치는 지 항상 검사하는 것은 아닙니다.
고정구 (이전 버전에서는 형태)를 정확하게 확인하려면 b2Fixture.TestPoint () 함수를 사용하십시오. 바디에는 여러 개의 조명기가있을 수 있으므로 전체 목록을 반복하여 확인해야합니다. 이 두 기능을 결합하면 원하는 경우 Phun의 기능을 다시 만들 수 있습니다.
나는이 질문이 오래되었다는 것을 알고 있지만 간단한 코드 기반 답변이 누락 된 것처럼 느낍니다. 그래서 여기 있습니다 :
/// <summary>
/// Return if a given position is inside the physical body.
/// </summary>
/// <param name="body">Body to test.</param>
/// <param name="position">Position to check if inside the body.</param>
/// <returns>If given point is inside the physical body.</returns>
public bool TestPointCollision(FarseerPhysics.Dynamics.Body body, Vector2 position)
{
// get body transformation
FarseerPhysics.Common.Transform trans;
body.GetTransform(out trans);
// iterate fixtures to see if any of them hit the point
foreach (var fix in body.FixtureList)
{
if (fix.Shape.TestPoint(ref trans, ref position))
return true;
}
// if there are no hits, return false
return false;
}
이것은 일반 Box2D가 아니라 Farseer (및 C #)이지만 정확히 동일한 API를 가져야합니다.