2011-05-03 60 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(); 

        } 


     } 

我喜歡讓我的身體的形狀,但我無法得到任何東西,只有空..爲什麼?不要運行這一行:Log.e(「name」,「」+ b.getUserData()。toString()+「」+ shape +「」);Box2D得到我的身體的形狀

所以形狀= b.getShapeList()。GETNEXT())總是空...

回答

5

我剛剛開始使用Box2D的自己。就我瞭解圖書館而言,獲取身體形狀的主要手段是通過他們的裝置。從夾具中獲得一個b2Shape指針 - 但是,因爲它的方法是虛擬的,所以您可能需要將它轉換爲b2PolygonShape/b2CircleShape指針,以便它有用。這裏是沿着這些線路的一些代碼:

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(); 
    }  
} 

一些其他的事情需要注意:b2Body的.getNext()函數返回一個指針 - 這是一個鏈表的實現。 b2Fixture :: GetNext()也是如此。在你的代碼中有一些不熟悉的東西(對我來說),所以我不能肯定地說,但如果你簡單地通過並確保你的變量與Box2D函數的返回類型相匹配,它可能會正常工作。