एक 2D विनाशकारी परिदृश्य को लागू करना (जैसे कीड़े)


76

वर्म्स की तरह एक विनाशकारी 2D परिदृश्य के निर्माण में कौन से कदम शामिल होंगे? आदर्श रूप से, इस प्रक्रिया को संभव बनाने के लिए कुछ तरीके क्या हैं?


7
बहुत बढ़िया सवाल। कीड़े की दो चुनौतियां हैं: विनाशकारीता, और अजीब कोणों पर भी आंदोलन।
राख राख

मुझे लगता है कि यह यहां कई बार पूछा गया है
विष्णु

2
विश, संबंधित लिंक यह सुझाव नहीं देते हैं।
कम्युनिस्ट डक

3
आप जांच सकते हैं कि यह हेडगेवार में कैसे किया गया है - यह ओपनसोर्स वर्म्स क्लोन है।
GvS

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

जवाबों:


47

मुझे नहीं पता कि कैसे कीड़े में परिदृश्य बिल्कुल लागू किया गया था, लेकिन मुझे पूरा यकीन है कि उन्होंने परिदृश्य के लिए एक बिटमैप का उपयोग किया (कम से कम श्रृंखला के पुराने खेलों में)।

एक बहुत ही बुनियादी दृष्टिकोण एक बिटमैप छवि (बी / डब्ल्यू) होगी जहां काले पिक्सेल हवा का प्रतिनिधित्व करते हैं और सफेद पिक्सेल जमीन का प्रतिनिधित्व करते हैं । परिदृश्य का विनाश पिक्सेल संचालन का उपयोग करके आसानी से किया जा सकता है। इसलिए यदि कोई रॉकेट जमीन से टकराता है, तो radius = blastRadiusप्रभाव के बिंदु पर एक काले घेरे को पेंट करें ।

फिर आप उस बिटमैप का उपयोग करके अपनी दुनिया को (या उसके एक हिस्से को) रेंडर कर सकते हैं। बेहतर प्रदर्शन के लिए मेरा सुझाव है कि आप इसे इस तरह से लागू करें, जिससे आप "दुनिया" के एक हिस्से को अपडेट / रेंडर कर सकें। उदाहरण के लिए। यदि परिदृश्य के कुछ हिस्से एक रॉकेट द्वारा नष्ट हो जाते हैं, तो प्रभावित क्षेत्रों को फिर से सौंप दें, न कि पूरी दुनिया को।

अपने "टक्कर-मानचित्र" के रूप में एक बी / डब्ल्यू छवि के बजाय, आप एक 24 बिट छवि का उपयोग भी कर सकते हैं, जहां आप प्रति पिक्सेल सतह-सामान्य (x, y) को प्रति पिक्सेल और एक चैनल को वास्तविक "टक्कर" को संग्रहीत करने के लिए उपयोग करते हैं। नक्शा"। हाथ में सतह-सामान्य होने से आपको उछलते हुए हथगोले की गणना करने, या यह निर्धारित करने में मदद मिलेगी कि क्या कोई चरित्र किसी दिए गए दिशा में आगे बढ़ सकता है।


3
अतिरिक्त जानकारी संग्रहीत करना टक्कर-नक्शा एक सुंदर विचार है।
deft_code

6

मेरे सिर के ऊपर से एक संभावना:

विनाशकारी "भूमि" की रूपरेखा को संग्रहीत करने के लिए एक वेक्टर ग्राफिक्स पथ प्रतिनिधित्व का उपयोग करें। जब कोई विनाश घटना होती है (उदाहरण के लिए, एक ग्रेनेड बंद हो जाता है), ब्लास्ट क्षेत्र, एक सर्कल के रूप में दर्शाया जाता है, एक बूलियन घटाव ऑपरेशन के माध्यम से भूमि पथ से हटा दिया जाएगा। परिणामी पथ जमीन टकराव का पता लगाने के लिए नए "भूमि" का प्रतिनिधित्व करता है, और संभवतः भूमि को खींचने के लिए एक मुखौटा भी है।


2
मुझे लगता है कि हेडगेवार ऐसा कैसे करते हैं। @ फिर भी, आप इसे देख सकते हैं, चूंकि ओपनसोर्स है।
गैस्टोन

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

4
कम्प्यूटेशनल ज्यामिति जैसे कि यह बहुत जटिल हो सकता है, बहुत तेज़!
एडम हर्ट

Googling "box2d विनाशकारी इलाके" अब कुछ रन करने योग्य वेक्टर डेमो देता है।
सिरो सांटिल्ली 新疆 i i i

6

रचनात्मक ठोस ज्यामिति का उपयोग करें

मैंने अवधारणा का एक प्रमाण लिखा है जो विनाशकारी इलाके को संभालने के लिए रचनात्मक ठोस ज्यामिति का उपयोग करता है। मैंने बूलियन ऑपरेशन करने के लिए GLU Tessellator का उपयोग किया। प्रलेखन कैसे, के लिए खोज बताते हैं "CSG नियम समापन के लिए उपयोग करता है"

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

पीओसी में अगला कदम (जो मुझे कभी नहीं मिला) एससीसी एल्गोरिथ्म का उपयोग बूस्ट ग्राफ लाइब्रेरी से यह पता लगाने के लिए किया गया था कि कब इलाके का एक टुकड़ा अलग कर दिया गया था (एक पहाड़ को काट दिया गया था)। गंभीर इलाका अभी भी विनाशकारी होगा लेकिन अब एक गतिशील (गैर-स्थैतिक) Box2D निकाय द्वारा आकृतियों के रूप में संलग्न त्रिकोणों का प्रतिनिधित्व किया जाता है। जब मैंने बूस्ट डॉक्युमेंटेशन में खुदाई शुरू की तो मेरे पास डिजाइन का काम था लेकिन दिलचस्पी खो गई। मैं "योजना" विचार फिर से जब मैं एक झुलसे पृथ्वी / कीड़े खेल किसी दिन बनाते हैं।


5

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

बेशक, यह पूरी तरह से आपकी परियोजना की महत्वाकांक्षाओं पर निर्भर करता है। लेकिन अगर आप चाहते हैं कि यह वास्तव में भयानक हो, तो शायद आपको भौतिकी इंजन के रूप में बॉक्स 2 डी की कोशिश करनी चाहिए । आप इसके साथ बहुत कुछ कर सकते हैं।


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

वह पूरा बिंदु था, मैं उस गेमप्ले पर बदलाव के बारे में सोच रहा था। इसके अलावा, परिदृश्य के कुछ हिस्से अविनाशी और / या स्थायी रूप से हवा में निलंबित हो सकते हैं, जो आपको "फ्लोटिंग" ब्लॉक बनाने देगा। इसके अलावा, कुछ उन पर लागू निरंतर बल हो सकते हैं, उन्हें ऊपर की ओर या बग़ल में खींच सकते हैं, जैसे कि गोओ की दुनिया में हवा की गेंदों ने क्या किया।
सेप्टाग्राम

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

ठीक है, इस मामले में बिटमैप कठोर निकायों को एक नहीं जाना होगा, इसके बजाय, मैं तिरछे ग्रिड के रूप में एक परिदृश्य बनाऊंगा, जो लंबे समय से जुड़ा हुआ है। क्या आपने गुओ की दुनिया खेली है? यदि नहीं, तो स्क्रीनशॉट देखें: vgchartz.com/games/pics/6644424aaa.jpg doublegames.de/images/screenshots/world-of-goo_1_big.jpg । नहीं, नहीं, नहीं, नहीं, अगर आपने इसे नहीं खेला है, तो आपको बिल्कुल :) अब कल्पना करें कि गू बॉल्स के बजाय हर त्रिकोण आपके लैंडस्केप बनावट का हिस्सा प्रदर्शित करता है, और वे बहुत छोटे हैं। स्थिरांक और आपके परिदृश्य के चारों ओर
फेल

2
भौतिक इंजन पर एक नज़र डालें । पूरा इंजन इस विचार के इर्द-गिर्द आधारित है कि सब कुछ एक विकृत / विनाशकारी जाली है (गू के टॉवर की तरह)।
deft_code

3

जैसा कि बम्माजैक ने बिटमैप्स कहा। यद्यपि आप 1 बिट पारदर्शिता का उपयोग कर सकते हैं या यदि आपके पास समर्थन नहीं है तो एक भयानक गुलाबी रंग का उपयोग करें जिसे आप अपने खेल में उपयोग नहीं करेंगे।

प्रभाव के बिंदु की गणना सिर्फ पिक्सेल रंग की जाँच की जा सकती है। और जब कोई प्रभाव होता है तो बिटमैप का रंग बदल जाता है (या उसे हटा देता है)।

ब्लास्ट त्रिज्या के रूप में मेरा पहला पड़ाव ब्रेसेनहैम का सर्कल एल्गोरिदम होगा , बहुत तेज़ और कुशल। हालांकि मैं एक वर्ग जैसे किसी चीज़ के साथ पहले डिलीट किया गया था और किनारों को प्राप्त करने के लिए इसे गोल गोल डाल दिया था।

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