संयोग से, मैंने ठीक वही किया है जो आप करने की कोशिश कर रहे हैं। एकमात्र कैच मैं Jbox2d का उपयोग कर रहा था इसलिए कोड जावा में है, लेकिन यदि आप C ++ का उपयोग कर रहे हैं तो भी आपको इसका पता लगाने में सक्षम होना चाहिए
यदि आप स्विंगिंग एक्शन करना चाहते हैं, तो आपको मूल रूप से जोड़ों / मोटरों और उस सभी मज़ेदार सामान का उपयोग करने की आवश्यकता है। यहाँ मेरा स्निपेट है कि कुंजी कोड के आधार पर मेरा कोड कैसा दिखता है:
if (myinput.mouse0) {
agents.get(0).rightForeJoint.enableMotor(true);
agents.get(0).rightArmJoint.enableMotor(false);
if (Keyboard.isKeyDown(Keyboard.KEY_SPACE)){
agents.get(0).rightForeJoint.enableMotor(false);
}
mouseY = Mouse.getY();
mouseX = Mouse.getX();
float temp = mouseY - prevPos[1];
float temp2 = -mouseX + prevPos[0];
temp2 *= modifier; temp2 *= 0.000026;
temp *= modifier; temp *= 0.000030;
agents.get(0).armR.applyAngularImpulse(-temp);
agents.get(0).foreR.applyAngularImpulse(temp2);
prevPos[1] = mouseY;
prevPos[0] = mouseX;
if(temp2 < 0){
temp2 *=-1;
}
if(temp < 0){
temp *=-1;
}
fatigueDrain += temp2;
fatigueDrain += temp;
}
और फिर जहां तक वास्तव में हथियारों और व्हाट्सएप का निर्माण है, स्निपेट इस तरह दिखता है।
// RIGHTARM //
this.rightArmDef = new RevoluteJointDef();
this.rightArmDef.bodyA = this.torso ; this.rightArmDef.bodyB = this.armR;
this.rightArmDef.collideConnected = false;
torso_armL_pin = new Vec2(0.50f, +0.05f);
local_armL_pin = new Vec2(0.14f, 0.14f);
this.rightArmDef.localAnchorA.set(this.torso.getLocalCenter().add(torso_armL_pin));
this.rightArmDef.localAnchorB.set(this.armR.getLocalCenter().add(local_armL_pin));
this.rightArmDef.enableMotor = true;
this.rightArmDef.motorSpeed = 0f;
this.rightArmDef.maxMotorTorque =10f;
this.rightArmDef.enableLimit = true;
this.rightArmDef.lowerAngle = 1.2f;// * DEGTORAD;
this.rightArmDef.upperAngle = 5;
this.rightArmJoint = (RevoluteJoint)world.createJoint(this.rightArmDef);
मुझे लगता है कि यहां बहुत कुछ हो रहा है, लेकिन इसका आसान तरीका है अगर आप मुझसे पूछें कि आपको स्पष्टता की आवश्यकता क्या है और मैं इसे समझाता हूं। यदि आपने कभी भी इनमें से किसी भी चीज़ का उपयोग नहीं किया है, तो आपको शायद थोड़ा सा पढ़ने की आवश्यकता होगी।
संपादित >>
एहसास, Box2d में टकराव का पता लगाने और भौतिकी के सभी अपने पुस्तकालयों में साफ है। जब मैं कहता हूं तो विश्वास पर ले लो, कोशिश करने और खरोंच से चीजों को करने की तुलना में उनकी प्रणाली का पता लगाना आसान है। यदि आप टकराव चाहते हैं, तो आप जुड़नार bodydefs का उपयोग करते हैं, यदि आप चाहते हैं कि वे घुमाएं या स्थानांतरित करें, तो आप जोड़ों का उपयोग करते हैं। यह पहली बार में थोड़ा अधिक जटिल लग सकता है, लेकिन अंत में यह आपको उनके तरीकों का उपयोग करने के लिए असीम रूप से अधिक समय बचाता है।
वास्तव में, मैं सुझाव दूंगा कि आप शायद कभी खत्म नहीं करेंगे अगर आप कोशिश करते हैं और खरोंच से चीजें करते हैं, तो मान लें कि आप एक भौतिकी खेल बना रहे हैं। क्योंकि घर्षण, उछाल जैसी चीजों की गणना करना और उल्लेख नहीं करना, / कुशल / टकराव का पता लगाना, आपको जीवन भर लेने वाला है।