आवेगपूर्ण कूद


12

एक बात है जो मुझे हैरान कर रही है, और वह यह है कि एक प्लेटफ़ॉर्मर में 'अशुद्ध-आवेगित' छलांग को कैसे लागू किया जाए। अगर आप नहीं जानते कि मैं किस बारे में बात कर रहा हूं, तो गुफा स्टोरी से मारियो, किर्बी और कोट्स के बारे में सोचें। उन दोनों में क्या समान है? खैर, आपके कूदने की ऊंचाई निर्धारित की जाती है कि आप कितनी देर तक जंप बटन दबाए रखेंगे।

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

मेरा वर्तमान कार्यान्वयन निम्नानुसार काम करता है:

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

जबकि जंप बटन दबाया जाता है, गुरुत्वाकर्षण बंद हो जाता है और गुरुत्वाकर्षण के निरंतर मान से अवतार का Y निर्देशांक घट जाता है। उदाहरण के लिए, यदि चीजें Z इकाइयों के प्रति टिक पर गिरती हैं, तो यह Z इकाइयों के प्रति टिकट में वृद्धि होगी।

एक बार जब बटन जारी किया जाता है या सीमा समाप्त हो जाती है, तो अवतार एक ऐसी राशि में उतरता है जो इसकी गति 0 तक पहुंचने तक एक्स इकाइयों को कवर करेगा; एक बार ऐसा होने पर, यह तब तक तेज हो जाता है जब तक कि इसकी गति गुरुत्वाकर्षण से मेल नहीं खाती - उदाहरण से चिपके हुए, मैं कह सकता हूं कि यह 0 से Z इकाइयों तक तेजी लाता है / अभी भी एक्स इकाइयों को कवर करते हुए टिक करता है।

यह कार्यान्वयन, हालांकि, कूदता को बहुत अधिक विकट बनाता है, और जब तक कि अवतार की गति गुरुत्वाकर्षण से तेज नहीं होती है, जो मेरी वर्तमान परियोजना में बहुत तेजी से आगे बढ़ेगा (यह लगभग 4 पिक्सेल प्रति टिक पर चलता है और गुरुत्वाकर्षण 10 पिक्सल प्रति टिक है,) 40FPS का एक फ्रेमरेट), यह इसे क्षैतिज से अधिक ऊर्ध्वाधर भी बनाता है। प्लेटफ़ॉर्मर्स से परिचित लोगों ने नोटिस किया कि चरित्र का चाप लगभग हमेशा कूदने की अनुमति देता है, भले ही वे खेल के गुरुत्वाकर्षण के रूप में तेज़ न हों, और जब यह सही नहीं खेला जाता है, तो यह खुद को साबित करेगा बहुत काउंटर-सहज ज्ञान युक्त। मैं यह जानता हूं क्योंकि मैं यह जान सकता था कि मेरा कार्यान्वयन बहुत कष्टप्रद है।

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

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

इसके अलावा, मैं एक भाषा-विशेष कोडिंग से बचने के लिए इसकी प्रस्तुति चाहूंगा; जैसे, हमें C ++ उदाहरण, या डेल्फी साझा करना ... जितना मैं अपनी परियोजना के लिए XNA फ्रेमवर्क का उपयोग कर रहा हूं और C # सामान का बुरा नहीं मानूंगा, मेरे पास अन्य कोड पढ़ने के लिए अधिक धैर्य नहीं है, और मैं अन्य भाषाओं के कुछ गेम डेवलपर्स को इसमें रुचि होगी कि हम यहां क्या हासिल करते हैं, इसलिए छद्म कोड से चिपके रहना बुरा नहीं है।

पहले से शुक्रिया।


3
क्या आपके पास निम्नलिखित प्रश्न और उसके उत्तर पर एक नज़र है? gamedev.stackexchange.com/questions/29617/…
bummzack

@bummzack यह बहुत अच्छी तरह से समाशोधन है।
मुतोह

1
जंप हैंडलिंग और ग्रेविटी के संभावित डुप्लिकेट जबकि इसमें बहुत अच्छी तस्वीरें नहीं हैं, यह एक ही सवाल है।
MichaelHouse

जवाबों:


8

मुझे लगता है कि आपकी मुख्य समस्या यहाँ है:

जबकि जंप बटन दबाया जाता है, गुरुत्वाकर्षण बंद हो जाता है और गुरुत्वाकर्षण के निरंतर मान से अवतार का Y निर्देशांक घट जाता है। उदाहरण के लिए, यदि चीजें Z इकाइयों के प्रति टिक पर गिरती हैं, तो यह Z इकाइयों के प्रति टिकट में वृद्धि होगी।

गुरुत्वाकर्षण उस तरह काम नहीं करता है। Google ने विवरण के लिए "समान रूप से त्वरित गति" की, लेकिन सरल शब्दों में, जैसा कि एक अन्य साथी सदस्य ने कहा, गुरुत्वाकर्षण एक त्वरण है, वेग नहीं।

इसे सीधे शब्दों में कहें, जबकि वेग समय के साथ स्थिति के परिवर्तन की निरंतर दर है , त्वरण समय के साथ वेग के परिवर्तन की निरंतर दर है ।

तो व्यापार का आपका पहला क्रम आपके गिरते एल्गोरिदम को बदलना होगा, जिसमें त्वरण शामिल है, न कि केवल वेग। के बजाय:

pos_y = pos_y + (velocity_y * time_difference)

आपको कुछ ऐसा करना होगा

pos_y = pos_y + (velocity_y * time_difference) + (gravity_y * (time_difference ^ 2) / 2)
velocity_y = velocity_y + (acceleration_y * time_difference)

इस तरह सब कुछ एक परवलय में गिर जाएगा, जो शारीरिक रूप से सही गति है।

अब, सरल जंपिंग को लागू करने के लिए (हम इसके ठीक बाद आपके सटीक प्रश्न पर पहुंचेंगे), आप बस velocity_yएक वांछित मूल्य पर सेट होते हैं। जब तक हस्ताक्षर acceleration_yऔर आपकी इच्छा velocity_yअलग-अलग होती है, तब तक आपकी वस्तु सही ढंग से कूद जाएगी (अन्य शब्दों में, आप "गुरुत्वाकर्षण बंद नहीं करते हैं"। आप इसे चालू रखते हैं, और बस वस्तु के वेग को कुछ पूर्वनिर्धारित मूल्य पर सेट करते हैं)।

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

ऐसा करने के लिए, आप पहले की तरह ही काम करते हैं, लेकिन अब त्वरण और वेग का एक ही संकेत होना चाहिए। बटन दबाए जाने पर आप ऐसा करते हैं:

pos_y = pos_y + (velocity_y * time_difference) + (force_y * (time_difference ^ 2) / 2)
velocity_y = velocity_y + (force_y * time_difference)

4

समाधान मंदी में देरी नहीं है। जब आप एक गेंद को हवा में फेंकते हैं, तो यह एक निरंतर गति से नहीं चलती है जब तक कि यह अपनी अधिकतम ऊंचाई तक नहीं पहुंचती है, लेकिन आवेग के क्षण से कम हो जाती है।

गुरुत्वाकर्षण एक वेग नहीं है, बल्कि एक त्वरण है। इसलिए यदि किसी खिलाड़ी की गति 20 इकाइयों से ऊपर है, और गुरुत्वाकर्षण -10 इकाइयाँ है, तो अगले टिक पर, गति ऊपर की ओर 10 इकाई होगी, अगली पर, 0 इकाइयाँ, आदि।

आपके कूदने का कारण इतना विकर्ण लग रहा है क्योंकि आपके खिलाड़ी की गति लगातार और नीचे है। इसलिए यदि आप सचमुच खिलाड़ी के पथ का अनुसरण करते हुए एक रेखा खींचते हैं, तो आप एक्स स्थिति में परिवर्तन पर अपने गुरुत्वाकर्षण मूल्य के ढलान, सकारात्मक या नकारात्मक के साथ एक रेखा देखेंगे।

अपने खिलाड़ी को अपनी कूद की ऊंचाई को नियंत्रित करने के लिए, आपके खिलाड़ी को आवेग पर कुछ प्रारंभिक वेग दिया जाना चाहिए, गुरुत्वाकर्षण को बंद कर देना चाहिए, और खिलाड़ी के वेग पर एक विशेष गुरुत्व मूल्य (नियमित गुरुत्वाकर्षण से कम) लागू किया जाना चाहिए। एक बार जंप बटन जारी होने या खिलाड़ी का वेग 0 तक पहुंचने के बाद, सामान्य गुरुत्वाकर्षण को लागू किया जाना चाहिए।

इस तरह, खिलाड़ी अपनी छलांग के दौरान एक अच्छा वक्र देखेंगे, चाहे वे नियमित गुरुत्वाकर्षण से कम हो रहे हों या नहीं।


2

लघुकथा यह है: आप कहीं न कहीं अपने जम्प आर्क में एक गैर-परवलयिक अनुभाग के लिए जा रहे हैं।

जंपिंग को लागू करते समय मैंने कुछ तरीकों की कोशिश की:

  • लगातार चढ़ना: यह प्रतीत होता है, वास्तव में, आप क्या प्रयास कर रहे थे: बटन के जारी होने तक सकारात्मक ऊर्ध्वाधर वेग होना, जिस बिंदु पर सामान्य गुरुत्व किक करता है। चाप चढ़ाई पर विकर्ण है, लेकिन गिरने पर सामान्य - यह वास्तव में सामान्य रूप से ठीक दिखता है, और (अधिक महत्वपूर्ण बात) ठीक लगता है, क्योंकि कूद की ऊंचाई को अच्छी तरह से आंकना काफी आसान है।

  • आरोहित चढ़ाई: यह वह जगह है जहां आप अधिकतम ऊंचाई के परबोला पर चढ़ते हुए चरित्र को शुरू करते हैं, एक प्रारंभिक आवेग को लागू करते हैं। फिर, जब बटन जारी किया जाता है, तो आप ऊर्ध्वाधर वेग को शून्य (या एक छोटे से ऊपर की ओर वेग) पर सेट करते हैं। इसका मतलब है कि आपकी सबसे बड़ी छलांग एक गारंटीकृत परबोला है, और छोटे कूदने से अधिक महसूस होता है जैसे आप एक बड़ी छलांग लगा रहे हैं और फिर धीमा कर रहे हैं।

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

इन्हें आज़माएं और देखें कि कौन सा सबसे अच्छा लगता है।

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