अच्छा 2D प्लेटफार्म भौतिकी [बंद]


76

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

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

मेरे कहने के कुछ उदाहरण:

  • कूद का एक छोटा नल थोड़ी दूरी पर कूदता है; एक लंबा नल उच्च कूदता है।
  • उच्च वेग पर दिशाओं को रोकते या उलटते समय लघु स्किडिंग।
  • उकसाने पर सख्ती से खड़े (लेकिन शायद बतख के नीचे फिसलने पर)।
  • एनालॉग नियंत्रक का उपयोग करते समय एनालॉग गति।
  • अन्य सभी चीजें जो अच्छे प्लेटफॉर्म को बुरे प्लेटफॉर्म से अलग करती हैं।
  • हिम्मत मैं सुझाव देता हूं, स्थिर गतिमान प्लेटफार्मों?

मैं वास्तव में "अरे, यह नहीं कर रहा हूँ।" जाहिर है, खेल में मैं जो चाहता हूं, उस पर निर्भर रहना सही है। लेकिन मैं उम्मीद कर रहा हूं कि कोई व्यक्ति संभावनाओं से गुजरा है और कहा है "अच्छी तकनीक ए में फीचर एक्स अच्छी तरह से है, तकनीक बी वाई अच्छी तरह से करता है, लेकिन यह सी के साथ काम नहीं करता है, या" इफ (अगर =) से परे कुछ काम किया है। = space) character.impulse (0, 1) "

जवाबों:



25

असली भौतिकी इंजन का उपयोग करके 'मारियो जैसी' भौतिकी को लागू करना काफी मुश्किल है।

पिछली बार जब मैंने यह कोशिश की थी, चिपमंक का उपयोग करते हुए, मैंने खिलाड़ी को 2 सर्कल के रूप में मॉडल किया - एक 'फीट सर्कल' के शीर्ष पर 'बॉडी सर्कल'

'फीट सर्कल' में कुछ घर्षण था, गैर-उछाल वाला था, और काफी छोटा था। दीवारों / खड़ी ढलानों से बचने के लिए 'बॉडी सर्कल' बड़ा और घर्षण रहित था

ऑब्जेक्ट को रोटेशन की अनुमति नहीं देने के लिए विवश किया गया था - यह बस चारों ओर स्लाइड करेगा

यदि 'पैर' किसी चीज को छू रहे हैं, या पिछले कुछ फ्रेम के भीतर थे (ढलान को नीचे गिरने की अनुमति देने के लिए), तो खिलाड़ी को जमीन पर माना जाता था (हो सकता है कि उसकी सतह सामान्य जांच हो, भी)

जब से मैंने कोड को देखा, तब से यह समय है, लेकिन व्यवहार इस तरह था:

जब जमीन पर:

  • 'अतिरिक्त गुरुत्वाकर्षण' (नीचे की ओर ढलान पर चलने में सहायता के लिए नीचे की ओर) लागू करें
  • जमीन घर्षण (क्षैतिज भिगोना की बड़ी मात्रा) लागू करें
  • नियंत्रण के आधार पर बाएँ / दाएँ आंदोलन बल लागू करें।
  • (अधिकतम रन गति के पास बाएं / दाएं आंदोलन बल को स्केल करें)
  • यदि कूद दबाया जाता है, तो ऊपर की तरफ आवेग लागू करें

जब हवा में:

  • वायु प्रतिरोध (क्षैतिज भिगोना की छोटी मात्रा) लागू करें
  • नियमित (या कम) गुरुत्वाकर्षण लागू करें
  • यदि आप इन-द-एयर नियंत्रण की अनुमति दे रहे हैं, तो बाएं / दाएं आंदोलन बल लागू करें

आप दोनों राज्यों के बीच स्विच करने के साथ थोड़ा सावधान हो गए हैं - याद रखें कि जब ढलान नीचे चल रहा है, तो आप फ्रेम के एक जोड़े के लिए जमीन छोड़ सकते हैं - आप शायद राज्यों को बदलना नहीं चाहते / उस बिंदु पर कूदना बंद कर सकते हैं।

हालांकि देखने के लिए कुछ अन्य चीजें, ... 'जंप-अप-थ्रू' प्लेटफॉर्म को लागू करना कठिन हो सकता है, और जब आप मज़ेदार चीजें करना शुरू करते हैं (प्लेटफ़ॉर्म घूमना, दुनिया घूमना, आदि), तो आपको सावधान रहना होगा सुनिश्चित करें कि खिलाड़ी किसी भी 'एनीमेशन चालित' मूविंग ऑब्जेक्ट द्वारा फंस / कुचल नहीं सकता है।


मुझे पता है कि यह एक बहुत पुराना उत्तर है, लेकिन इस पर मेरे कुछ सवाल हैं। 1) आप कैसे हल करते हैं "एक ही गति रखें जो कुछ भी आप पर हैं ढलान?" 2) यदि आप पैरों के लिए एक छोटा वृत्त और शरीर के लिए एक बड़ा वृत्त का उपयोग कर रहे हैं, तो क्या खिलाड़ी कुछ समय के लिए किनारों पर नहीं लटका होगा? मैं वास्तव में आपकी aproach में दिलचस्पी रखता हूं।
नोटबंदी

18

ईमानदारी से मुझे नहीं लगता कि सुपर सख्त आवश्यकताओं वाले उस आकार के डोमेन के लिए भौतिकी इंजन का उपयोग करना सही दृष्टिकोण है।

बस यह सब आप ही लिखिए। जब आप knobs का एक गुच्छा ट्वीक करने की तुलना में "लंबाई y के लिए जंप बटन नीचे पकड़े" इस parabola आकार में एक्स इकाइयों द्वारा चाल चरित्र कह कर आप बहुत बेहतर परिणाम मिल जाएगा।


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

3
मैं इसके बजाय एक बॉक्स प्रस्तावक को हैक कर सकता हूं, कम से कम यह अस्थिर नहीं हो सकता है, जबकि एक भौतिकी इंजन में विस्फोट हो जाता है यदि आप उस पर बहुत अधिक बल फेंकते हैं क्योंकि आपको सटीक ऐनक के लिए आंदोलनों को बाध्य करने की आवश्यकता होती है (और भौतिकी इंजन बाधा नहीं देता है ' टी कठोर, वे केवल इतना पालन करने की कोशिश कर सकते हैं)। इसके अलावा, एक अवांछित मुद्दे को हल करने के लिए बलों को लागू करने से बाकी सब कुछ प्रभावित होता है, जिससे ट्विकर्स नर्क में जाते हैं।
काज

10

मैंने आधुनिक तकनीकों का उपयोग करते हुए जमीन से एक प्लेटफ़ॉर्म गेम बनाने के बारे में कई लेख लिखे और इसमें यह भी शामिल है कि मैंने कैसे सरल भौतिकी को संभाला:

http://www.wildbunny.co.uk/blog/2011/12/14/how-to-make-a-2d-platform-game-part-2-collision-detection/

हालाँकि यदि आप कुछ अधिक उच्च तकनीक चाहते हैं तो पूर्ण रूप से एक भौतिकी इंजन का उपयोग करके इसे प्राप्त करना संभव है। यहां एक तकनीक है जिसका उपयोग आप कर सकते हैं (लिटिल बिग प्लैनेट से) जो खिलाड़ी के चरित्र को भौतिकी इंजन का पूरी तरह से एकीकृत हिस्सा बनाता है:

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

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

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

उम्मीद है की वो मदद करदे!

चीयर्स, पॉल।


6

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

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