2011-01-16 17 views
14

Ich versuche, ein "U" -Form in Box2d (in Cocos2d) durch Verbinden von 3 Rechtecke wie folgt zu erstellen: | _ |Box2d mehrere Fixtures und Positionierung

Es hört sich so an, als ob Gelenke hier nicht die richtige Lösung sind, da ich keine Bewegung möchte, also habe ich einen Hauptkörper geschaffen, der das Mittelstück und 2 Befestigungen für die Seiten ist. Ich habe die beiden Seiten in der Mitte bisschen wie folgt hinzugefügt:

mainBody->CreateFixture(&leftFixtureDef); 
mainBody->CreateFixture(&rightFixtureDef); 

Dies funktioniert jedoch beide Seitenbefestigungen zum Zentrum des main hinzugefügt bekommen. Ich kann nicht herausfinden, wie man die Fixtures relativ zum Hauptkörper positioniert. Das Anbringen eines Sprites/Knotens an der Fixture und das Ändern der Position scheint keinen Unterschied zu machen.

Irgendwelche Ideen?

Vielen Dank.

Antwort

27

es ist die Eigenschaft einer Form. Ich habe keine solche Eigenschaft für b2CircleShape gefunden, aber für b2PolygonShape hat m_centroid Parameter - es ist die Form Zentrum Koordinaten relativ zum Körper. Geben Sie an, dass die Position einer Form gültig ist.

Für b2PolyganShape gibt es ein Verfahren setAsBox(w, h) aber alos gibt es komplexere one:

setAsBox(float32 width, float32 height, const b2Vec2 &center, float32 rotation) 

Mit dieser Methode oder die Zentroid manualy angeben.

Hier ist der Code für die U

Form
b2BodyDef bDef; 
bDef.type = b2_dynamicBody; 
bDef.position = b2Vec2(0, 0); 
b2Body *body = world_->CreateBody(&bDef); 

b2PolygonShape shape; 
const float32 density = 10; 

shape.SetAsBox(1, 0.1); 
body->CreateFixture(&shape, density); 

shape.SetAsBox(0.1, 1, b2Vec2(-1 + 0.1, 1), 0); 
body->CreateFixture(&shape, density); 

shape.SetAsBox(0.1, 1, b2Vec2(1 - 0.1, 1), 0); 
body->CreateFixture(&shape, density); 
+0

Brilliant! Danke, Andrew. – GivP

+7

@Andrew: Für b2CircleShape ist die Eigenschaft m_p, d. H. Die Mittelposition des Kreises. – legends2k