如何让光线投射忽略Box2d中的对象?

时间:2017-09-08 05:33:07

标签: python box2d raycasting

我在python Box2D中有以下RayCastCallback函数。

Class RayCastCallback(Box2D.b2.rayCastCallback):
  def ReportFixture(self, fixture, point, normal, fraction):
    if (fixture.filterData.categoryBits & 1) == 0:
      return 1
    self.p2 = point
    self.fraction = fraction
    return 0

我通过为每个角度实例化一个然后说

来使用它
ray_cast_callback.p1 = position
ray_cast_callback.fraction = 1.0
ray_cast_callback.p2 = (position[0] + math.cos(radians)*range, position[1] + math.sin(radians)*range)
world.RayCast(ray_cast_callback, ray_cast_callback.p1, ray_cast_callback.p2)

这很好用,但我的问题是,在我设置的世界中,有多种不同类型的静态和动态对象,我希望它排除特定静态对象的实例,以便RayCast只是直接通过他们。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

通常在光线投射中,以下值用作返回类型

  

-1表示过滤,0表示终止,分数表示剪辑最近点击,1表示继续

您可以检查对象类型,如果是静态则返回-1以忽略此对象。