2013-03-09 8 views
13

मेरे पास एक ऐसा शरीर है जिसमें 10 का द्रव्यमान है, और कार्यक्रम के प्रत्येक चक्र में मैं सरल दृष्टिकोण का उपयोग करके 100 की एक बल लागू करता हूं;बॉक्स 2 डी बॉडी वेग कैप?

Vector2 force = new Vector2(0, 1) * 100; 
bod.ApplyForce(force, bod.GetWorldCenter()); 

यह बहुत अच्छा काम करता है, को तेज करता है और यह सब, लेकिन एक बार यह 10 के वेग (100/10 मुझे लगता है) करने के लिए हो जाता है कि यह किसी भी तेजी से नहीं जाना होगा। मैं किसी भी माध्यम से भौतिक विज्ञानी नहीं हूं, लेकिन मुझे याद है कि शरीर को लगातार बढ़ना चाहिए, जैसे गुरुत्वाकर्षण के तहत। क्या यह गति बॉक्स 2 डी चीजों के तरीके के परिणामस्वरूप सीमित है, या क्या मैं रॉयली को कुछ खराब कर रहा हूं? इसके अलावा, मैं इसे ठीक करने के लिए क्या करूँगा।

नोट: अगर मैं ApplyForce

के बजाय ApplyLinearImpulse का उपयोग मैं एक ही सीमित वेग मिल

अद्यतन: मैं समग्र अधिकतम गति सीमा Box2D (b2Settings.h में) द्वारा लगाए गए से अच्छी तरह परिचित हूं। मेरे उदाहरण में, प्रश्न में आइटम लागू सीमा को बदलने के रूप में इस सीमा से नीचे चल रहा है, चाहे वह 1000 या 10000 हमेशा (बल/द्रव्यमान) की अधिकतम वेग तक आ जाए।

+0

यह उचित उत्तर नहीं है लेकिन शायद आपको एक छोटे से समग्र पैमाने पर काम करना चाहिए। इस तरह आप छोटी ताकतों को लागू कर सकते हैं और फिर कुछ बलों की सीमाओं से फंस नहीं पाएंगे। जब आप बहुत बड़े पैमाने पर काम करते हैं तो Box2d अक्सर पसंद नहीं करता है। – phemios

+0

पैमाने ठीक है। किसी ऑब्जेक्ट में 10 किलोग्राम का द्रव्यमान होता है और मैं इसे 100 एनएस का बल लागू कर रहा हूं। कैप्ड की गति 10 मीटर/एस है जो बॉक्स 2 डी के लिए स्केल रेंज में रास्ता है। –

+1

क्या आपने रैखिक धुंधला जांच की है? – Davos555

उत्तर

3

आप किसी ऑब्जेक्ट की अधिकतम स्वीकार्य वेग मार रहे हैं। इसे ठीक करने के दो तरीके हैं:

  1. अपनी बॉक्स 2 डी सेटिंग्स में अधिकतम स्वीकार्य वेग समायोजित करें; सेटिंग्स खोलें और MaxTranslation फ्लोट/कॉन्स को उच्च मान पर बदलें, मुझे लगता है कि यह 2.0 के डिफ़ॉल्ट पर है।

  2. अपने ऑब्जेक्ट आकार को स्केल करें, आवश्यक गणनाएं करें, अपनी ऑब्जेक्ट्स को बैक अप लें। एक शरीर की अधिकतम रेखीय वेग

: यह MaxTranslation टिप्पणी के लिए Box2D की टिप्पणी के रूप में, यह ऐसा करने का तकनीकी रूप से सही तरीका है। यह सीमा बहुत बड़ी है और संख्यात्मक समस्याओं को रोकने के लिए प्रयोग किया जाता है। आपको इसे समायोजित करने की आवश्यकता नहीं है।

तो # 1 का प्रयास करें, और यदि यह काम करता है, तो इसका मतलब है कि आपको स्केलिंग की आवश्यकता है। उम्मीद है की वो मदद करदे।

+0

यह उत्तर पॉप-अप रहता रहता है, और यह गलत है। कृपया पूरे प्रश्न को पढ़ें, विशेष रूप से 'अद्यतन' –

+0

का उल्लेख किया गया हिस्सा क्या आप वाकई 10 मीटर/एस के ** वेग ** को मार रहे हैं? या क्या आप वास्तव में प्रति मिनट चरण में 10 मीटर की दूरी पर हैं? बॉक्स 2 डी दूरी प्रति दूरी चरणों में आंदोलन की रिपोर्ट कर रहा है, इसलिए यदि आप 60 हर्ट्ज मानते हैं, तो दिया गया निकाय 'मैक्सट्रांसलेशन' डिफ़ॉल्ट 2 'को कवर करता है।प्रति मिनट 0 इकाइयां वास्तव में 120 मीटर/एस की गति से आगे बढ़ रही हैं। मुझे कठोर ध्वनि का मतलब नहीं है, लेकिन मुझे लगता है कि आप दोनों को भ्रमित कर सकते हैं। –

+0

हाँ, मैं सकारात्मक हूं। मैं आप जो वर्णन कर रहा हूं उसके बारे में बहुत जागरूक हूं। अगर मैं सीमा को मार रहा था, तो मैं इसे रैंप करने में सक्षम नहीं हूं क्योंकि मैं वर्णन कर रहा हूं (बड़ी ताकतों के साथ)। –

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