2012-04-18 9 views
5

मैं कुछ इस तरह के साथ एक box2d वस्तु पर एक आवेग को लागू करने कर रहा हूँ में बिंदु एक से दूर जाती है मैं एक आवेग बना सकते हैं:कैसे इतना है कि बिंदु ख box2d/cocos2diphone

b2Vec2 impulse = b2Vec2(4.0f, 15.0f); 
body->ApplyLinearImpulse(impulse, body->GetWorldCenter()); 

मैं जानता हूँ कि यह शायद अधिक है स्कूल गणित, और मैं वादा करता हूं कि मैंने इसे अपने लिए खोजने के प्रयास किए हैं; कृपया मेरी अज्ञानता को क्षमा करें।

यदि मेरे पास ए, बी और सी ऑब्जेक्ट्स हैं और ऑब्जेक्ट बी और सी के मध्य बिंदु पर है, तो मैं बॉक्स 2 डी आवेग कैसे बना सकता हूं ताकि ऑब्जेक्ट्स बी और सी वेग वेग से दूर हो जाएं?

scientific diagram drawn with great skill and focused intent

+0

+1: बिल्ली से प्यार करें। – RBarryYoung

+0

धन्यवाद। यदि प्रोग्रामिंग काम नहीं करती है तो मैं ललित कला में जा रहा हूं। – glenstorey

उत्तर

3

इस उपयोग करके देखें:

b2Vec2 impulseB = bodyB->GetPosition() - bodyA->GetPosition(); 
impulseB /= impulseB.Length(); 
impulseB *= predefinedScaleValue; // predefinedScaleValue is your velocity 
b2Vec2 impulseC = -impulseB; 
bodyB->ApplyLinearImpulse(impulseB, bodyB->GetWorldCenter()); 
bodyC->ApplyLinearImpulse(impulseC, bodyC->GetWorldCenter()); 

मुझे आशा है कि यह स्पष्ट है यहाँ क्या हो रहा है। यदि नहीं, तो बस पूछें :)

+0

एक इलाज धन्यवाद काम करता है! मुझे लाइन 2 पर एक त्रुटि मिलती है "सदस्य संदर्भ b2Vec2 एक सूचक नहीं है" लेकिन अगर मैं इसे बाहर ले जाता हूं तो चीजें ठीक काम करने लगती हैं, तो इस त्रुटि का क्या अर्थ है? – glenstorey

+0

यह मानता है कि बी और सी ए के बिल्कुल विपरीत पक्षों पर हैं। यदि नहीं, तो आपको सी के लिए पहली तीन पंक्तियों को दोहराने की आवश्यकता है। – iforce2d

+0

फिक्स्ड लाइन 2 - यह '->' के बजाय एक बिंदु होना चाहिए था। @ iforce2d - सवाल कहता है कि वस्तु एक मध्य में है। – jrtc27

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