저는 방금 pyBox2D로 게임을 시작했으며, 위로 내려가는 게임에서 주위를 둘러보기 위해 raycasting을했습니다. 이는 http://ncase.me/sight-and-light/과 유사합니다. 그러나 일부 광선은 물체에 던져지고이 물체를 계속 따라 다니며 그 뒤에있는 다른 물체를이 GIF에 표시합니다. http://imgur.com/C3Wyg4T
일부 광선은 물체를 통해 전달되지만 그 주위에서 동적 상자를 움직이면 볼 수 있습니다. 여기 pyBox2D raycasting이 제대로 작동하지 않습니다.
때로는
약 일 (틱)하지만 고장 내 raycasting 콜백class lightRayCasting(b2RayCastCallback):
def __init__(self, point, ignoreBody):
b2RayCastCallback.__init__(self)
self.hit = False
self.point = point
self.ignoreBody = ignoreBody
def ReportFixture(self, fixture, point, normal, fraction):
if fixture.body != self.ignoreBody and fixture.filterData.groupIndex != -1 and not self.hit:
self.hit = True
self.point = point
return 0
return 1
입니다 그리고 나는 raycasting
def lightRayCasting(self, position, **kwargs):
points = []
for ray in range(kwargs.get("n", 100)):
angle = (ray/kwargs.get("n", 100) * 360 * (b2_pi/180))
rayDirection = b2Vec2(math.sin(angle), math.cos(angle)) * kwargs.get("length", 10)
callback = lightRayCasting(rayDirection, ignoreBody = kwargs.get("ignoreBody", None))
self.world.RayCast(callback, self.convertPosition(position), rayDirection)
points.append(self.convertPosition(callback.point, 1))
if kwargs.get("debugDraw", False):
if callback.point != rayDirection: pygame.draw.aaline(self.surface, (255, 0, 0), position, self.convertPosition(callback.point, 1))
else: pygame.draw.aaline(self.surface, (0, 255, 0), position, self.convertPosition(callback.point, 1))
if not kwargs.get("debugDraw", False):
pygame.gfxdraw.filled_polygon(self.surface, points, (255, 255, 255))
pygame.gfxdraw.aapolygon(self.surface, points, (255, 255, 255))
01,235을 부르고 곳이다
self.convertPosition은 Box2D가 작업 할 픽셀을 미터로 변환하는 중입니다. 나는 때때로 그것이 작동하지만 다른 때에는 작동하지 않는 이유를 알 수 없다. 레이캐스팅이 작동하려면 시체가 깨어 있어야합니까?