2011-12-17 1 views
1

로프 연결의 앵커 위치를 결정하기 위해 레이 캐스트를 사용하고 있습니다. 간단한 그리기 호출을 사용하여 로프 연결이 반환되는 지점에서 로프 연결이 안정적으로 만들어지고 있음을 알 수 있습니다. 내 문제는 반환 지점에 놓여 있습니다. 때로는 시체를 통과하여 반대편 경계에있는 점을 반환하고 때로는 시체 내부로 전달합니다. 그것이 반복적으로 통과하는 광선을 던지면 일관되게 실패하는 것처럼 보입니다. 다시 말하면, 똑같은 잘못된 점을 통과하여 되돌려줍니다. 이것은 내가 내 몸에 문제가 있다고 믿게한다. 문제의 바디에 TextureToBody 변환기를 사용하고 있습니다.Raycast에서 VB.NET.XNA의 Farseer Physics를 사용하여 탐지가 누락되었습니다.

또 다른, 덜 문제는 정확하게 관절 위치에서 각 방향으로 10/64를 빼야한다는 것입니다. 왜 이런 일이 일어나는지 모르겠습니다. 당신은 레이 캐스트에 의해 반환되는 모든 지점의 목록을 만든 다음 거리를 기준으로 정렬해야 시어의 내 사용을 기반으로

Private Sub castRay(startPoint As Vector2, direction As Vector2) 
     direction *= 25 
     direction.Y = (-direction.Y) 
     world.RayCast(Function(fixture As Fixture, point As Vector2, normal As Vector2, fraction As Single) 
          Dim body As Body = fixture.Body 

          ropeContactFixture = fixture 
          ropeContactPoint = point 
          ropeJoint = New RopeJoint(Me.body, fixture.Body, New Vector2(0, 0), point - ropeContactFixture.Body.Position - (New Vector2(10, 10)/64)) 
          Return 0 
         End Function, startPoint, startPoint + direction) 
    End Sub 

답변

0

:

레이 캐스트 방법 (64pixels은 = 1m 내가 사용하고 변환 비율이다) . Farseers 코드에서 촬영

-
 Ray-cast the world for all fixtures in the path of the ray. Your callback 
    controls whether you get the closest point, any point, or n-points. 
    The ray-cast ignores shapes that contain the starting point. 

    Inside the callback: 
    return -1: ignore this fixture and continue 
    return 0: terminate the ray cast 
    return fraction: clip the ray to this point 
    return 1: don't clip the ray and continue 

그래서 당신은 광선을 따라 점의 목록을 가장 가까운을 찾은 다음 밧줄을 만들 수 있어야이 기술을 사용하여.

내가 왜 direction.Y을 반전하는지 잘 모르겠지만 의도 한대로해야합니다.