2d - Sprites के बीच टक्कर का पता लगाने के लिए सबसे अच्छा तरीका है?




collision-detection allegro (5)

एक पुस्तकालय का प्रयोग करें, मैं बॉक्स 2 डी की सिफारिश करता हूँ

क्या 2 डी खेल sprites में टकराव का पता लगाने का सबसे अच्छा तरीका है? मैं वर्तमान में थैली और जी ++ में काम कर रहा हूं


किसी भी सभ्य 2 डी ग्राफिक्स पुस्तकालय या तो गठबंधन sprites से बहुभुजों को पिक्सल तक सब कुछ के लिए अपनी टकराव का पता लगाने का कार्य प्रदान करेगा, या उन कार्यों को पूरा करने के लिए एक या अधिक अच्छी तीसरे पक्ष के पुस्तकालय हैं। इंजन / लाइब्रेरी / फ़्रेमवर्क की आपकी पसंद को आपकी टकराव का पता लगाने के विकल्प को निर्देशित करना चाहिए, क्योंकि ये संभवतः आप अकेले ही पैदा कर सकते हैं उससे अधिक अनुकूल हैं।

एलेग्रे के लिए कॉलेग्रे है SDL के लिए SDL_Collide.h या SDL- कोलाइड है । आप ओपनजीएल के साथ I_COLLIDE का उपयोग कर सकते हैं। अंधेरे बीएएसआईसी एक टकराव प्रणाली में निर्मित है, और टकराव सहित बहुत ही सटीक बातचीत के लिए डार्क प्रोफेशिक्स है


टकराव का पता लगाने के लिए कई तरीके हैं। यदि आप 2 डी या 3 डी परिवेश का उपयोग कर रहे हैं, तो आपके द्वारा उपयोग किए जाने वाले विधियों को थोड़ा बदल दिया जाएगा। यह भी याद रखें कि टकराव का पता लगाने प्रणाली शुरू करने के लिए, उस भौतिक विज्ञान को ध्यान में रखने के लिए, जिसे आप खेल में लागू कर सकते हैं (ज़्यादातर वंश 3 डी गेम के लिए आवश्यक) ताकि इसकी वास्तविकता को बढ़ा सके।

संक्षिप्त संस्करण सीमा बक्से का उपयोग करना है या दूसरे शब्दों में, दुनिया में प्रत्येक इकाई को एक बॉक्स बनाते हैं, फिर जांच लें कि बॉक्स के अक्षरों में से प्रत्येक दूसरे संस्थाओं के साथ मिलकर टकरा रहे हैं या नहीं।

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

अधिक संसाधनों के लिए, आप बुलेट डायनामिक्स इंजन के लिए सोर्सफोर्ज और खोज कर सकते हैं जो कि ओपन सोर्स टकराव का पता लगाने और भौतिकी इंजन है, या आप http://www.gamedev.net की जांच कर सकते हैं, जो प्रचुर मात्रा में खेल के विकास पर बहुत सारे संसाधन हैं विषय।


यह सवाल बहुत सामान्य है 2 डी गेम में टक्कर का पता लगाने के कई तरीके हैं। यह जानने में मदद मिलेगी कि आप क्या करने का प्रयास कर रहे हैं।

हालांकि प्रारंभिक बिंदु के रूप में, बहुत सरल तरीके हैं जो सर्कल, आयत, आदि के बीच का पता लगाने के लिए अनुमति देते हैं। मैं gamedev.net का बड़ा प्रशंसक नहीं हूं, लेकिन इस प्रकार के पहचान के बारे में कुछ अच्छे संसाधन हैं I ऐसा एक लेख यहां है । इसमें कुछ बुनियादी सामग्रियों को शामिल किया गया है जो आपको आरंभ करने में मदद कर सकता है।

मूल 2 डी गेम स्क्रीन पर ऑब्जेक्ट को "संलग्न" करने के लिए आयत या मंडल का उपयोग कर सकते हैं। जब आयताकार ओवरलैप होता है या जब मंडली ओवरलैप होती है तब का पता लगाने की स्थिति काफी सीधा है। यदि आपको अधिक जटिल (जैसे कि उत्तल कला पुस्तकालय पॉलिस) की आवश्यकता है, तो समाधान अधिक जटिल है। फिर, gamedev.net यहां कुछ मदद की हो सकती है।

लेकिन वास्तव में आपके प्रश्न का उत्तर देने के लिए, हमें यह जानना चाहिए कि आप क्या करने की कोशिश कर रहे हैं? गेम किस प्रकार का है? किस प्रकार की ऑब्जेक्ट आप टकराने की कोशिश कर रहे हैं? क्या आप स्क्रीन सीमाओं से टकराने की कोशिश कर रहे हैं, आदि


टक्कर का पता लगाने प्रणाली का कार्यान्वयन एक जटिल मामला है, लेकिन आप तीन बिंदुओं पर विचार करना चाहते हैं।

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

  • व्यापक चरण टकराव का पता लगाने यह निर्धारित करने के लिए कि वस्तु अधिक विस्तृत रूप से तुलना करने योग्य हैं या नहीं, यह सिलेंडरों या एलियिप्स (जो भी आपके sprites के आकार के लगभग अनुमानित) के रूप में बाउंडिंग वॉल्यूम का उपयोग करता है। इसके लिए गणित आसान है। अपने 2 डी मैट्रिक्स परिवर्तनों को जानें और 2 डी चौराहे के लिए, आप बहुत काम करने के लिए उच्च शक्ति वाले वीडियो कार्ड का उपयोग भी कर सकते हैं!

  • संकीर्ण चरण टकराव का पता लगाने अब जब आपने यह निर्धारित किया है कि दो या दो से अधिक ऑब्जेक्ट तुलना करने योग्य हैं, तो आप अपने ठीक ट्यूनेड अनुभाग में कदम उठाते हैं। इस चरण का लक्ष्य टकराव परिणाम निर्धारित करना है। प्रवेश की गहराई, मात्रा शामिल है, आदि ... और यह जानकारी आपको जो भी भौतिकी इंजन की योजना बनाई गई है उसे खिलाया जाएगा। 3 डी में यह जीजेके दूरी एल्ग्स और अन्य नेटो एल्गोरिदम का दायरा है जो हम सब इतना प्यार करते हैं!

आप ये सभी सामान्य रूप से लागू कर सकते हैं और व्यापक और संकीर्ण संकल्प को पॉलिमोरफाईक रूप से निर्दिष्ट कर सकते हैं, या यदि आप निम्न स्तर की भाषा में काम कर रहे हैं तो हुक प्रदान करें।