2011-01-16 12 views
14

मैं 3 आयताकारों में शामिल होने से Box2d (Cocos2d में) में "यू" आकार बनाने का प्रयास कर रहा हूं: | _ |Box2d एकाधिक फिक्स्चर और पोजिशनिंग

ऐसा लगता है जैसे जोड़ सही समाधान नहीं हैं क्योंकि मुझे कोई आंदोलन नहीं चाहिए इसलिए मैंने मुख्य निकाय बनाया है जो कि बीच के लिए मध्यम बिट और 2 फिक्स्चर है। मैं इस तरह मध्य बिट करने के लिए दोनों पक्षों को जोड़ दिया है:

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

यह काम करता है, लेकिन दोनों पक्ष जुड़नार mainbody के केंद्र के लिए जोड़े जाते हैं। मैं मुख्य शरीर से संबंधित फिक्स्चर को कैसे व्यवस्थित करना चाहता हूं, यह काम नहीं कर सकता। स्थिरता के लिए एक स्प्राइट/नोड संलग्न करना और स्थिति बदलना कोई फर्क नहीं पड़ता है।

कोई विचार?

बहुत धन्यवाद।

उत्तर

27

यह एक आकार की संपत्ति है। मुझे b2CircleShape के लिए ऐसी संपत्ति नहीं मिली, लेकिन b2PolygonShape के लिए m_centroid पैरामीटर है - यह शरीर के सापेक्ष आकार केंद्र निर्देशांक है। इसे आकार की वैध स्थिति रखने के लिए निर्दिष्ट करें।

b2PolyganShape के लिए वहाँ एक विधि setAsBox(w, h) है, लेकिन alos वहाँ अधिक जटिल है एक: इस विधि या केन्द्रक manualy निर्दिष्ट

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

का प्रयोग करें।

यहाँ यू के लिए कोड को आकार

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

शानदार है! धन्यवाद, एंड्रयू। – GivP

+7

@Andrew: b2CircleShape के लिए संपत्ति m_p i.e. सर्कल की केंद्र स्थिति है। – legends2k

संबंधित मुद्दे