तेज़ चीज़ को धीमा करें (Box2D)


9

मैं एक ऐसे खेल पर काम कर रहा हूं, जिसमें आप प्रतिद्वंद्वी को गेंदों को फेंकने के लिए एक ट्रेबचैट को नियंत्रित करते हैं।

यह 'मध्यकालीन घेराबंदी' नामक खेल की तरह है। जब ट्रेबुचेट अपनी बांह को झुला रहा है, तो खिलाड़ी को बटन दबाने और गेंद को रिलीज करने के लिए सबसे अच्छे क्षण को जब्त करने की आवश्यकता होती है। फिर गेंद स्पर्शरेखा के कोण पर उड़ जाएगी। यहाँ छवि विवरण दर्ज करें अभी मेरी समस्या यह है कि ट्रेबुचेट आर्म स्विंग खिलाड़ी के लिए सही क्षण को जब्त करने के लिए बहुत तेज़ है। इस बीच यह तेजी से होना चाहिए अन्यथा यह बहुत दूर नहीं फेंक सकता है। और गेंद और ट्रेबुचेट आर्म को जोड़ने वाली एक छोटी सी स्ट्रिंग होती है, यदि हाथ बहुत धीमी गति से स्विंग होता है, तो हाथ को हिलाने पर गेंद सिर्फ स्ट्रिंग पर लटकी होती है।

मैं चरण आकार को टॉगल करके समस्या को हल करता हूं, जब भी हाथ स्विंग होता है, मैं चरण आकार को 1/60 से 1/200 तक बदल देता हूं। और एक बार खिलाड़ी गेंद को छोड़ देता है, तो यह 1/60 पर वापस आ जाता है।

यह बहुत अच्छा काम करता है सिवाय मेरे खेल के नेटवर्किंग के साथ मल्टीप्लेयर के लिए। इसलिए बदलते कदम से समस्या हो सकती है।

एक और उपाय जो मैं सोच सकता हूं, वह है इसे धीमी गति से स्विंग करने की अनुमति देना, लेकिन जब खिलाड़ी गेंद को रिलीज करता है, तो मैं अपनी दिशा रखते हुए गेंद पर मैन्युअल रूप से वेग जोड़ता हूं। मुझे वास्तव में यह समाधान पसंद नहीं है क्योंकि यह नकली लगता है और मुझे अभी भी यह समस्या है कि गेंद केवल स्ट्रिंग पर लटकी हुई है, जब तक कि मैं स्ट्रिंग को बहुत छोटा न कर दूं ..

कृपया इस पर कुछ प्रकाश डालें, धन्यवाद!


संपादित करें

सभी के इनपुट के लिए धन्यवाद, मैं हाथ की स्विंग को धीमा करके समस्या को हल करता हूं और जब खिलाड़ी गेंद को रिलीज करता है, तो गेंद का वेग और दो बार पकड़ता है। यह बिल्कुल चरण आकार बदलने जैसा दिखता है। वहाँ सिर्फ एक अतिरिक्त बात है जो मुझे करने की ज़रूरत है। क्योंकि हाथ वास्तव में धीमी गति से झूल रहा है, गेंद स्विंग के बजाय आर्म छोर पर लटकी हुई है। मैंने इसे गेंद पर गुरुत्वाकर्षण बल के बराबर बल लगाने के दौरान और केवल स्विंग अवधि के दौरान हल किया। फिर यह वहाँ नहीं लटका बल्कि हाथ से एक साथ झूले।

@Mrranky का जवाब विस्तृत है और यह देखने योग्य है, इसलिए मैं इसे स्वीकार करूंगा। :)


हो सकता है कि आप ट्रेबुचेट को धीरे-धीरे आगे बढ़ा सकते हैं, लेकिन उन बलों को गुणा करें जो गेंद पर कार्य करते हैं? मैंने पहले Box2D के साथ काम नहीं किया है, इसलिए यदि यह एक मूर्ख विचार है तो क्षमा करें। इसके अलावा, मेरा एकमात्र अनुमान यह है कि गेंद के द्रव्यमान के साथ चारों ओर घूमना यह देखने के लिए कि क्या भारी या हल्का आपको धीमी गति से स्वीकार्य परिणाम दे सकता है। इसके अलावा, यह वास्तविक जीवन ट्रेब्यूचैट के भौतिकी में देखने लायक हो सकता है। वे कुछ हद तक धीमे दिखते हैं , इसलिए हो सकता है कि उनके बारे में डेटा (आकार, बारूद, बल आदि) आपको अपने नकली के लिए कुछ विचार दे सकते हैं।
क्रिश्चियन

2
"वास्तविक बात" की तरह व्यवहार करने के लिए कंप्यूटर भौतिकी प्राप्त करना वास्तव में मुश्किल है। लगभग सभी भौतिकी इंजन कठोर निकायों का अनुकरण करते हैं, जिसका अर्थ है कि ट्रेबॉच आर्म के झुकने का न तो कोई हिसाब है, न ही रस्सी भौतिकी और न ही किसी भी तरह से भौतिक व्यवहार सटीक है, इसलिए "धोखा" के बिना एक सटीक सिमुलेशन असंभव के बगल में है। वास्तविक दिखने वाली किसी चीज़ के करीब पहुंचने की प्रक्रिया कुछ इस तरह से होती है: ट्विक, ट्वीक, ट्विक, चीट, ट्वि, ट्विट, चीट, चीट, ट्विस्ट, स्टार्ट ओवर, ट्विन, ट्विक, ट्विक, ट्विट, चीट, ट्विट, चीट। , धोखा, मरोड़।
LearnCocos2D

4
बिल्ली का बच्चा तोप इस मुद्दे पर सबसे यथार्थवादी दृष्टिकोण का उपयोग करता है: मनुष्य वास्तव में भौतिक वास्तविकता में हेरफेर करने के लिए बुरा है और मशीन सहायता की आवश्यकता है, अगर आप एक ट्रेबचेट की "भावना" देना चाहेंगे जो मानव के लिए धीरे-धीरे नियंत्रित करने के लिए पर्याप्त रूप से चलती है - लॉन्च शारीरिक रूप से संभव से अधिक तेज, आप इसे "फायरिंग" का विशुद्ध रूप से कलात्मक एनीमेशन बनाना चाहते हैं और उसके बाद गेंद को उस स्थान पर रख सकते हैं जहां उपयोगकर्ता एनीमेशन को बाधित करता है।
मिकलाह

जवाबों:


3

सहज रूप से मैं यह कहूंगा कि हम उत्तर के लिए आवश्यक संदर्भ का एक बड़ा हिस्सा याद कर रहे हैं, जो है "मल्टीप्लेयर पहलू आपको टाइमस्टेप को बदलने से क्यों रोकता है?"

यदि आप नेटवर्क कनेक्शन पर भौतिकी सिमुलेशन साझा करने की कोशिश कर रहे हैं, तो ठीक है, यह आमतौर पर एक बहुत कठिन काम है। सिमुलेशन बहुत आसानी से विचलन करते हैं, और विशेष रूप से नेटवर्क कनेक्शन के साथ जो पैकेट खो सकते हैं, चीजों को एक साथ रखना बहुत कठिन है।

आपके प्रश्न का सरल और सबसे मजबूत उत्तर एक चर टाइमस्टेप का उपयोग करना है। जब आप निर्णय के क्षण के करीब पहुंचते हैं, तो हर वास्तविक दुनिया के लिए एक सेकंड के लिए अपने भौतिकी सिमुलेशन को अपडेट करने के बजाय जो पास होता है, उसे आधा सेकंड या किसी अन्य उपयुक्त संख्या से अपडेट करें। जैसा कि यह एक एकीकरण प्रभाव है, आप शायद निर्णय विंडो के दौरान अद्यतन दर को कम दर पर नीचे ले जाने के साथ दूर जाने में सक्षम होंगे, लेकिन आप कम दर पर जल्दी से नीचे की ओर भी प्रक्षेप कर सकते हैं। किसी भी तरह से, आप अनिवार्य रूप से धीमी गति में भौतिकी सिमुलेशन वापस खेल रहे हैं। इसे पूरी तरह से सही व्यवहार करना चाहिए, बस इतना धीमा होना चाहिए कि खिलाड़ी अपना निर्णय ले सके। मैं इसे काम करने के लिए भौतिकी को विफल करने के किसी अन्य माध्यम पर विचार नहीं करूंगा, वे सबसे अधिक संभावना है कि सभी काम भयानक होंगे और 'सही' महसूस नहीं करेंगे।

इसलिए हम नेटवर्किंग कार्यान्वयन पर वापस आते हैं। अधिक जानकारी के बिना, मुझे लगता है कि आपके पास दो विकल्प हैं। सबसे पहले, यदि आप अन्य नेटवर्क पार्टी के साथ लॉकस्टेप में काम कर रहे हैं। इसलिए जब एक खिलाड़ी को अपना निर्णय लेने के लिए धीमा करना पड़ता है, तो दोनों खिलाड़ियों को समान रूप से धीमा करना पड़ता है। यह शायद उस खिलाड़ी के लिए कष्टप्रद और अजीब लगेगा जो फायरिंग नहीं करता है, क्योंकि यह अपनी प्रतिक्रिया समय को भ्रमित करेगा।

दूसरे के लिए, एक दूसरे पर दो ट्रेब्यूच फायरिंग की कल्पना करें। ट्रेबुचेट को फेंकने में 10 सेकंड लगते हैं, और फायरिंग विंडो टी + 5 एस से शुरू होती है। P1 T + 0s पर फायरिंग चक्र शुरू करता है, और T + 5s में अपने स्थानीय भौतिकी सिमुलेशन को 50% तक धीमा कर देता है। यह उन्हें पूरे चक्र के माध्यम से खेलने के लिए 15s लगेगा। इसलिए T + 5s में, P1 P2 को पूर्ण गति से 10s लॉन्च चक्र को वापस खेलना शुरू करने के लिए कहता है। तो P1 trebuchet चक्र को 15s में देखता है, P2 देखता है कि इसे 10s लगते हैं, लेकिन दोनों खिलाड़ी T + 15s पर चक्र को पूरा करते हैं। जब पी 1 वास्तव में रिलीज होता है, तो वे पी 2 को बताते हैं कि उन्होंने कब जारी किया था। इसलिए यदि P1 T + 10s पर रिलीज़ होता है, तो यह वास्तव में 10s लॉन्च चक्र के माध्यम से 7.5s पर है। P2 तब T + 12.5s (चक्र के अपने स्थानीय पार्श्व में 7.5) पर रिलीज दिखा सकता है, और दोनों खिलाड़ियों के सिमुलेशन को चक्र में समान भौतिक बिंदु पर प्रक्षेप्य को लॉन्च करना चाहिए।

तो इस दूसरे दृष्टिकोण में, अब आप लॉकस्टेप में अनुकरण नहीं कर रहे हैं। आप दो स्वतंत्र सिमुलेशन चला रहे हैं, लेकिन इसके बजाय खिलाड़ी इनपुट पर नज़र रख रहे हैं। यदि दोनों को बताया जाता है कि खिलाड़ी को लॉन्च चक्र में 7.5 के दशक में रिलीज़ किया गया है, तो उन्हें दोनों को इस बात पर सहमत होना चाहिए कि प्रक्षेप्य कहाँ उतरेगा। हालांकि, व्यवहार में, यह बहुत तेजी से बढ़ने की संभावना है, और आपको किसी भी तरह सिमुलेशन राज्यों को सिंक्रनाइज़ करने की आवश्यकता है।


0

क्यों न पहले से मौजूद चीज़ों की नकल / अनुकूलन करें और समान मामलों में काम करें?

यहाँ छवि विवरण दर्ज करें


0

यदि आपका ट्रेबुचेट बहुत तेजी से आगे बढ़ रहा है, तो इसे हल करने के लिए समय के साथ स्पष्ट समाधान होगा। यही है, वास्तविक समय के हर सेकंड के लिए, अपने भौतिकी सिमुलेशन में केवल 0.1 सेकंड पास करें। अब, खिलाड़ी के दृष्टिकोण से, गेंद 10 गुना धीमी गति से आगे बढ़ेगी।

वास्तव में, एक और तरीका है जिससे आप समान प्रभाव प्राप्त कर सकते हैं: स्केलिंग समय के बजाय, अपने सभी भौतिकी स्थिरांक को स्केल करें जो समय सहित इकाइयों में हैं। उदाहरण के लिए, गुरुत्वाकर्षण त्वरण की गति / समय = दूरी / time so की इकाइयाँ होती हैं, इसलिए यदि गुरुत्वाकर्षण आपके खेल में एकमात्र स्थिर है, तो इसे 100 = 10² के कारक से घटाकर समान प्रभाव प्राप्त करता है, जैसे कि 10 के कारक द्वारा समय धीमा करना। ।

बेशक, यदि आपके भौतिकी मॉडल में समय की इकाइयों (या गति = दूरी / समय, या त्वरण = दूरी / समय,, आदि) के साथ अन्य स्थिरांक शामिल हैं, तो आपको उन पैमानों को भी मापना होगा, यदि आप प्रक्षेपवक्रों को समान रखना चाहते हैं। ।

ध्यान दें कि आप इसके साथ कितनी दूर तक जा सकते हैं, इसकी एक सीमा है: यदि आप समय को धीमा कर देते हैं, तो कहें, 100 का कारक, आपके ट्रेब्यूच को नियंत्रित करना वास्तव में आसान होगा, लेकिन आपके खिलाड़ियों को ऊब होने की संभावना है गेंदें धीरे-धीरे उन्हें फायर करने के बाद नीचे की ओर तैरती हैं। यदि यह एक समस्या है, तो आपको अधिक उन्नत चालों का सहारा लेना पड़ सकता है, जैसे कि अन्य उत्तरों में सुझाए गए जैसे कि ट्रिब्यूखेट फायरिंग करते समय वास्तव में धीमी गति से स्केलिंग का उपयोग करना, लेकिन गेंद लॉन्च होने के बाद तेजी से समय के पैमाने पर स्विच करना।


धन्यवाद, लेकिन यू शायद मेरा संपादन नहीं देखा। हाँ, मैंने इसे आपके जवाब में अंतिम विधि से हल किया
Arch1tect
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.