2011-01-16 18 views
14

Sto tentando di creare una forma di "U" in Box2d (in Cocos2d) unendo 3 rettangoli in questo modo: | _ |Box2D più apparecchi e posizionamento

Suona come articolazioni non sono la soluzione corretta qui dato che non voglio alcun movimento così ho creato un corpo principale, che è il bit di mezzo e 2 apparecchi per i lati. Ho aggiunto le due parti per il bit di mezzo come questo:

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

Questo funziona, tuttavia entrambi i dispositivi laterali vengono aggiunti al centro del mainBody. Non riesco a capire come posizionare i proiettori rispetto al corpo principale. Attaccare uno sprite/nodo all'apparecchio e cambiare la posizione non sembra fare la differenza.

Qualche idea?

Molte grazie.

risposta

27

E 'di proprietà di una forma. Non ho trovato tale proprietà per b2CircleShape, ma per b2PolygonShape ha m_centroid paramter - è il centro forma coordinate rispetto al corpo. Specificare per avere una posizione valida di una forma.

Per b2PolyganShape c'è un metodo setAsBox(w, h) ma alos c'è più complessa:

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

Utilizzare questo metodo o specificare il manualy baricentro.

Ecco il codice per la figura di U

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! grazie, Andrew. – GivP

+7

@Andrew: Per b2CircleShape la proprietà è m_p cioè la posizione di centro del cerchio. – legends2k