2013-05-23 3 views
6

मैं lib2dx का उपयोग कर बॉक्स 2 डी के साथ अपने पहले गेम पर काम कर रहा हूं। मैं अपनी वस्तुओं का परीक्षण करने के लिए डीबग रेंडरर का उपयोग कर रहा हूं। मैंने वस्तुओं की तरह कुछ कार बनाई। प्रत्येक कार में मुख्य शरीर होता है, जो 6 अंक (लगभग 1 मीटर लंबा, 0.7 मीटर ऊंचा) का एक बड़ा बहुभुज है, और इसमें दो पहियों को घुमावदार जोड़ों से जोड़ा जाता है।कुछ निकायों के लिए असफल होने में लिबडक्स बॉक्स 2 डी में टकराव

मुख्य कार में एक तोप और एक मशीन गन संलग्न है, जो विद्रोह जोड़ों के माध्यम से भी जुड़ा हुआ है।

मुझे जिस समस्या का सामना करना पड़ रहा है वह यह है कि कार का बड़ा हिस्सा टकराव नहीं कर रहा है। 2 कारों एक दूसरे को मारा है, वे अतिव्यापी हैं, इस तरह:

Bodies colliding

कुछ नोट:

  1. पहियों और तोपों (छोटे आकार) टक्कर ठीक कर रहे हैं। जब पहिये स्पर्श करते हैं तो शरीर
  2. अगर मुझे कोड के माध्यम से टकराव का पता चलता है, तो टकराव वास्तव में
  3. मैंने इसे एक छोटी वस्तु (मशीन बंदूक से निकाल दिया गया गोली) के साथ करने की कोशिश की, और मैंने ऑब्जेक्ट की "isBullet सेट की "सच के रूप में मैं एक अलग पोस्ट (not proper collision in box2d) में देखा, लेकिन एक ही परिणाम था संपत्ति (बुलेट लाल रंग में परिक्रमा कर रहा है):

Bullet object colliding

यहाँ कोड मैं बनाने के लिए उपयोग कर रहा हूँ है निकायों:

protected Body createBody(Material material, Shape shape, BodyType type, WorldWrapper world) 
{ 
    BodyDef bodyDef = new BodyDef(); 
    bodyDef.type = type; 
    bodyDef.position.set(initialPosition); 

    Body body = world.createBody(bodyDef); 

    FixtureDef fixtureDef = new FixtureDef(); 
    fixtureDef.density = this.material.getDensity(); 
    fixtureDef.friction = this.material.getFriction(); 
    fixtureDef.restitution = this.material.getRestitution(); 
    fixtureDef.shape = shape; 
    body.createFixture(fixtureDef); 

    return body; 
} 

कार चला जाता है पहियों विद्रोह करना जोड़ों पर मोटर्स, इस तरह बनाया गया आगे का उपयोग कर:

public void goForward() 
{ 
    for (RevoluteJoint joint : wheelJoints) 
    { 
     joint.enableMotor(true); 
     joint.setMotorSpeed(-this.engineSpeed); 
     joint.setMaxMotorTorque(this.engineTorque); 
    } 
} 

मैं निम्न मान का उपयोग कर रहा:

Density = 2500; 
Restitution = 0; 
Friction = 0.1; 
BodyType = Dynamic; 

मैं एक 1/60 उपयोग कर रहा हूँ सेकेंड वर्ल्ड स्टेप, वेग के साथ संस्करण = 6 और स्थिति इटरेशन = 2

कोई विचार क्या मैं यहां क्या खो रहा हूं?

उत्तर

5

आपकी कार (बहुभुज) का मुख्य भाग अवतल है। बॉक्स 2 डी को अवतल बहुभुज के साथ परेशानी है या यदि शिखर घड़ी के क्रम में हैं। उन कारों को दो आयताकारों के साथ बनाने का प्रयास करें, जो काम करना चाहिए।

बीटीडब्ल्यू: आप libgdx के पुराने संस्करण का उपयोग करने लगते हैं। वर्तमान libgdx नाइटलीज़ में polygon.set फ़ंक्शन में एक अतिरिक्त एल्गोरिदम होता है, जो दिए गए शीर्षकों के विपरीत क्रम में उत्तल रूप से उत्तल रूप से गणना करता है। तो उस संस्करण का उपयोग करने से आपकी समस्या भी ठीक होनी चाहिए।

+0

धन्यवाद! मैं आज कोशिश करूँगा। बीटीडब्ल्यू मैंने 3 सप्ताह पहले इस प्रोजेक्ट को बनाया है, और मैंने सेटअप निष्पादन योग्य में libgdx कार्यक्षमता अद्यतन का उपयोग किया है। क्या बदलाव हाल ही में हैं? – Charbel

+2

मैं गिटहब पर जो देखता हूं, उससे 22 मार्च को परिवर्तन जोड़ा गया था। नवीनतम libgdx रिलीज बिल्ड 16 मार्च से है, इसलिए यह वर्तमान में केवल रात की रात में है। – Shinni

+0

मैंने बहुभुज को एक उत्तल आकार के रूप में बदल दिया और यह प्रभावी रूप से समस्या थी। मैं 2 आयतों के सुझाव का उपयोग करूंगा। धन्यवाद! – Charbel

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