2016-03-16 4 views
5

मेरे पास box2d में शरीर की मनमाने ढंग से गहरी पेड़ संरचना है। जब कोई अभिभावक शरीर किसी चीज़ से टकराता है, तो उसे अपने बच्चों को साथ ले जाना चाहिए। दूसरी तरफ, यदि टक्कर के कारण बच्चे को स्थानांतरित किया जाता है, तो माता-पिता को छुआ नहीं जाना चाहिए। एक शरीर एक शरीर के माता-पिता और एक बच्चे को एक ही समय में दूसरे के लिए हो सकता है।निकायों के बीच बॉक्स 2 डी पदानुक्रमित कनेक्शन

क्या यह Box2D में इसे लागू करने का कोई तरीका है? जोड़ों में से कोई भी इसका प्रतिनिधित्व करने में सक्षम नहीं लगता है, क्योंकि वे सभी सममित हैं।

+0

कृपया मेरे उत्तर को स्वीकार करने पर विचार करें या यह अभी भी अनुत्तरित होने की व्याख्या करने वाली टिप्पणी छोड़ दें। धन्यवाद! –

+0

मुझे खेद है, लेकिन उन 9 महीनों के दौरान मैंने एक अलग समाधान लागू किया जो कि बॉक्स 2 डी पर आधारित नहीं था, इसलिए मैं यह सत्यापित नहीं कर सकता कि आपका समाधान काम करता है, हालांकि यह वादा करता है। – anlumo

उत्तर

2

हां। एल्गोरिदमिक रूप से बोलते हुए, अवधारणात्मक नेस्टेड दुनिया का उपयोग करें।

इसके लिए यहां कुछ छद्म कोड है। आपको शरीर को गतिशील होने और वहां घनत्व क्या होना चाहिए जैसे विवरण भरने की आवश्यकता होगी। लेकिन उम्मीद है कि कोड यह करने के लिए एक तरीका दिखाता है:

extern void render(b2World& world, b2Vec2 position); 

b2World world(b2Vec2(0, 0)); 
b2World subWorld(b2Vec2(0, 0)); 

b2BodyDef bodyDef; 

// Create body outside of "parent". 
bodyDef.position = b2Vec2(-15, 14); 
b2Body* otherBody = world.CreateBody(&bodyDef); 

// Setup "parent" body. 
b2Body* parentBody = world.CreateBody(&bodyDef); 
b2Vec2 vertices[] = { b2Vec2(10, 10), b2Vec2(-10, 10), b2Vec2(-10, -10), b2Vec2(10, -10) }; 
b2PolygonShape parentShape; 
parentShape.Set(vertices, 4); 
b2FixtureDef parentFixtureDef; 
parentFixtureDef.shape = &parentShape; 
parentBody->CreateFixture(&parentFixtureDef); 

// Setup container for bodies "within" parent body... 
b2BodyDef childBodyDef; 
// set childWorldBody to being static body (all others dynamic) 
b2Body* childWorldBody = subWorld.CreateBody(&childBodyDef); 
b2ChainShape containerShape; 
containerShape.CreateLoop(vertices, 4); 
b2FixtureDef childContainerFixture; 
childContainerFixture.shape = &containerShape; 
childWorldBody->CreateFixture(&childContainerFixture); 

// First example of creating child body "within" the parent body... 
childBodyDef.position = b2Vec2(0, 0); // Inside child world and with childContainerShape. 
b2Body* bodyInChild = subWorld.CreateBody(&childBodyDef); 
// Call subWorld.CreateBody for all the bodies in the child world. 
// Always create those child bodies within the bounds of vertices. 

for (;;) 
{ 
    world.Step(0.1, 8, 3); 
    subWorld.Step(0.1, 8, 3); 

    render(world, b2Vec2(0, 0)); 
    render(subWorld, parentBody->GetPosition()); 
} 
संबंधित मुद्दे