我正在使用光线投射来确定绳索接头的锚点位置。通过使用一些简单的绘图调用,我可以看到在光线投射返回的点可靠地创建了ropejoint。我的问题在于返回点。它偶尔会穿过身体,返回对面边界上的一个点,有时会在身体内部。它似乎总是失败,也就是说,如果我投射一条重复穿过的光线,它会继续穿过并返回相同的错误点。这让我相信我的身体有问题。我正在为有问题的身体使用 TextureToBody 转换器。
另一个较小的问题是我必须从我的关节位置在每个方向上减去 10/64 才能使其准确连接。我不知道为什么会这样。(64pixels=1meter是我使用的转换比例)
光线投射方法:
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