2011-05-03 4 views
1
 Body b; 
     while ((b=box2d.physics.PhysicssWorld.world.getBodyList().getNext())!=null) { 

        Shape shape; 
        while ((shape=b.getShapeList().getNext())!=null) { 

         Log.e("name",""+b.getUserData().toString()+" "+shape+" "); 

         opengl.saveMatrix(); 
          Meshes.select(b.getUserData().toString()) 
            .translate((b.getPosition().x)*RATIO, (b.getPosition().y)*RATIO) 
            .rotate((int) ((int) b.getAngle()* (180/Math.PI)), 0, 0, 1) 
            .draw(shape, 1,1,1); 

         opengl.loadMatrix(); 

        } 


     } 

Je tiens à le faire ma forme de corps, mais je ne peux pas obtenir quoi que ce soit, seul null .. pourquoi?Box2D obtenir la forme de mes corps

ne jamais exécuter cette ligne: Log.e ("nom", "" + b.getUserData(). ToString() + "" + shape + "");

si la forme = b.getShapeList(). GetNext()) toujours nul ...

Répondre

5

Je viens juste de commencer avec Box2D moi-même. Autant que je comprends la bibliothèque, le principal moyen d'obtenir les formes des corps est à travers leurs appareils. A partir du projecteur, vous obtenez un pointeur b2Shape - mais, comme ses méthodes sont virtuelles, vous aurez probablement besoin de le transformer en pointeur b2PolygonShape/b2CircleShape pour qu'il soit utile. Voici un code le long de ces lignes:

void DoStuffWithShapes(b2World *World) 
{ 
    b2Body * B = World->GetBodyList(); 
    while(B != NULL) 
    { 
     b2Fixture* F = B->GetFixtureList();    
     while(F != NULL) 
     { 
      switch (F->GetType()) 
      { 
       case b2Shape::e_circle: 
       { 
        b2CircleShape* circle = (b2CircleShape*) F->GetShape();      
        /* Do stuff with a circle shape */ 
       } 
       break; 

       case b2Shape::e_polygon: 
       { 
        b2PolygonShape* poly = (b2PolygonShape*) F->GetShape(); 
        /* Do stuff with a polygon shape */ 
       } 
       break; 
      } 
      F = F->GetNext(); 
     } 

     B = B->GetNext(); 
    }  
} 

Quelques autres choses à noter: la fonction .getNext() de b2Body renvoie un pointeur - c'est une implémentation d'une liste chaînée. La même chose est vraie pour b2Fixture :: GetNext(). Il y a des choses inconnues (pour moi) dans votre code, donc je ne peux pas le dire avec certitude, mais ça pourrait marcher si vous passez simplement par et assurez-vous que vos variables correspondent aux types de retour des fonctions Box2D.

Questions connexes