Python pyBox2D光线投射无法正常工作

Python pyBox2D光线投射无法正常工作,python,pygame,box2d,raycasting,Python,Pygame,Box2d,Raycasting,我刚开始玩pyBox2D,正在做一个自上而下的光线投射游戏来观察周围的物体,类似于。 但是一些光线被投射到一个物体上,并继续穿过该物体,然后击中后面的另一个物体,如图所示 正如您所看到的,一些光线投射穿过对象,但当我移动动态框时,它开始工作(ish),但有时会出现小故障 这是我的光线投射回叫 class lightRayCasting(b2RayCastCallback): def __init__(self, point, ignoreBody): b2RayCast

我刚开始玩pyBox2D,正在做一个自上而下的光线投射游戏来观察周围的物体,类似于。 但是一些光线被投射到一个物体上,并继续穿过该物体,然后击中后面的另一个物体,如图所示
正如您所看到的,一些光线投射穿过对象,但当我移动动态框时,它开始工作(ish),但有时会出现小故障

这是我的光线投射回叫

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
这就是我称之为光线投射的地方

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))

self.convertPosition只是将像素转换为米,以便Box2D使用。我不明白为什么有时它能起作用,但有时它不起作用。身体必须保持清醒才能进行光线投射吗?

我已经解决了我的问题,对于任何想知道我从回调中提取分数的人,每次回调都会检查分数是否小于当前值,以及是否将交点设置为回调上的点

    def ReportFixture(self, fixture, point, normal, fraction):
        if fraction < self.fraction:
            if not fixture in self.ignoreFixtures:
                if not fixture.filterData.groupIndex in self.ignoreIndexes:
                    self.hit = True
                    self.point = point
                    self.fraction = fraction
        return 1
def报告装置(自身、装置、点、法线、分数):
如果分数<自分数:
如果在self.ignoreFixtures中没有夹具:
如果self.ignoreIndexes中没有fixture.filterData.groupIndex:
self.hit=True
self.point=点
自我分数=分数
返回1