2017-09-08 5 views
0

J'ai la fonction RayCastCallback suivante dans python Box2D.Comment est-ce que je fais raycasting pour ignorer un objet dans Box2d?

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 

Je l'utilise par instancier un pour chaque angle puis dire

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) 

Cela fonctionne bien, mais mon problème est que dans le monde, je l'ai mis en place, il y a plusieurs différents types de objets statiques et dynamiques et je veux qu'il exclue les instances d'un objet statique particulier de sorte que le RayCast passe juste à travers eux.

Comment faire?

Répondre

1

Habituellement en raycasting les valeurs suivantes sont utilisées comme type de retour

-1 pour filtrer, 0 à résilier, fraction pour couper le rayon de succès le plus proche, 1 pour continuer

Vous peut vérifier le type d'objet et s'il est statique, retourner -1 pour que cet objet soit ignoré.