पिनबॉल गेम के लिए 2 डी टकराव का पता लगाना


9

पिछले खेलों में अब तक मैंने साधारण 2 डी टकराव का उपयोग किया है, फिर टक्कर के लिए पिक्सेल स्तर पर जाँच की।

लगभग बहुत सारे फ्रेम में पिनबॉल गेम बनाते समय गेंद एक दीवार या दूसरी सतह के संपर्क में होगी तो क्या कोई और तरीका है?

जवाबों:


19

पिछले दिनों (1990), पुराने पिनबॉल खेल इस तरह बनाए गए थे:

प्लेफ़ील्ड के लिए कई परतें हैं (खेल खेलते समय आप क्या देखते हैं):

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

और टक्करों के लिए कई परतें:

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

बाएं ग्रेस्केल चित्र मुख्य खेल के लिए टकराव का नक्शा है, दायां चित्र विशेष क्षेत्र के लिए टकराव का नक्शा है: पिनबॉल रैंप।

White = गेंद, रंग सूचकांक के लिए मुफ्त क्षेत्र 255 है।

Gray= गेंद को इस क्षेत्र से "दूर" धकेल दिया जाएगा। रंग सूचकांक = गेंद की स्थिति में जोड़ने के लिए वेक्टर का कोण। हल्का ग्रे = ० नीचे। डार्क ग्रे = 360 डिग्री।

कुछ छद्म कोड:

void do_ball_physics()
{
    while(1)
    {
         byte color = read_pixel_under_ball(ballx, bally); //one pixel read
         if(color == 255) //see remark below
            break;
         float vectorx = sin(color/255.0f * 2.0f * PI);
         float vectory = cos(color/255.0f * 2.0f * PI); 
         ballx += vectorx; //push ball away from one unit
         bally += vectory; //

    }
}

कुछ विशेष रंग अनुक्रमणिका भी टक्कर से कुछ और के लिए इस्तेमाल किया जा सकता है, एक कस्टम रंग रेंज (जैसे: 240 - 255) जैसे विशेष क्षेत्रों का पता लगाने के लिए आरक्षित किया जा सकता है spinners, triggers, bumpers, holes, ...

जैसा कि आप देख सकते हैं, यह बहुत सरल है। प्रति फ्रेम केवल कुछ पिक्सेल "पढ़ा" है। इस वजह से आप भौतिक सिमुलेशन को वास्तविक उच्च फ्रैमरेट पर चला सकते हैं जैसे: 200 एफपीएस। उच्च फ्रैमरेट का उपयोग अनुकरण को सुचारू करेगा और "टनलिंग" को कम करेगा (यह तब होता है जब गेंद बहुत तेजी से जाती है और टकराने के बिना गर्त तत्वों को पास करती है)। वह सरलता वह भी है जो आने वाले दिनों में 386 computers(और यहां तक ​​कि तेजी से 286) चिकनी पिनबॉल खेलों को संभव बनाती है ( कुछ अन्य ट्रिक जैसे कि कलर साइकिलिंग, वीजीए स्क्रॉलिंग और स्प्राइट मास्किंग ...)।

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

उदाहरण ( दृश्य पिनबॉल से ):

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

कुछ खेल कंपनियों ने अपने भौतिकी इंजन का उपयोग लेकिन एक और, आसान तरीका है की तरह एक भौतिकी इंजन का उपयोग करना है Box2Dया Bullet। अधिकांश iPhone पिनबॉल गेम मैंने देखा कि पहले से मौजूद भौतिकी इंजन + कुछ 3 डी संपत्ति का उपयोग कर रहे थे।


... हम यहां जावास्क्रिप्ट और कैनवास पर बात कर रहे हैं, इसलिए इस ढांचे में सबसे धीमा संचालन संभव है ... पिक्सल और ड्राइंग को पढ़ना ... विशेष रूप से सबसे धीमी डिवाइस पर। तो इस उत्तर के 4/5 केवल इतिहास / अप्रासंगिक हैं। लेकिन औचित्य चित्रों के साथ प्रतिस्पर्धा नहीं कर सकता।
GameAlchemist

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

आधुनिक ब्राउज़रों में छवियों में पिक्सेल पढ़ना भी बहुत तेज़ है। पहले "omg JS में से कुछ C की तुलना में तेज़ है" डेमो सभी इमेज-प्रोसेसिंग गुठली थे।
सीन मिडिलिचविच

आपने टक्कर के नक्शे के बारे में कैसे सीखा?
बेमू

1
इस पिनबॉल के कारण रीमेक सपने: pouet.net/prod.php?which=24499 (मेरे द्वारा नहीं)। सूत्रों में देखें, टकराव का नक्शा मैं बात कर रहा हूं।
शाम

1

पिनबॉल में भौतिकी के बहुत समृद्ध सेट होते हैं, जिसमें न केवल छेद या दीवारें होती हैं, बल्कि प्रतिक्रियाशील तत्व (पीछे की ओर) या असमान सतह होती है, जहाँ गेंद धीमी हो जाती है और फिर वापस गति हो जाती है।

यदि आप एक अच्छा पिनबॉल बनाना चाहते हैं, तो जाने का रास्ता या तो एक 3 डी टक्कर का पता लगाने का उपयोग करना है, या दूरी और वेग मापदंडों के साथ एक विधि होने वाली प्रत्येक ठोस वस्तु के साथ स्व-अनुरूप प्रणाली है, बदले हुए वेगों को वापस करना है।


आप 3 डी टकराव का पता क्यों लगाते हैं कि 2 डी पर क्या होता है?
जॉन

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

1

मैंने थोड़ी देर पहले एक पिनबॉल खेल बनाया; यह पिक्सेल आधारित भी था। मेरे पास एक टक्कर का नक्शा था जिसमें सिर्फ टक्कर के डेटा थे। एक सामान्य टक्कर सामान्य को खोजना आसान था:

गेंद को ओवरलैप करते हुए टक्कर के नक्शे का क्षेत्र लें, केंद्र ढूंढें, उस बिंदु से गेंद केंद्र तक वेक्टर बनाएं, फिर सामान्य करें।

आशा है कि आप कुछ विचार देता है :)


1

यदि आप एक पिनबॉल खेल बनाते हैं, तो आपको सबसे अधिक संभावना बाउंडिंग बॉक्स की तुलना में अधिक बाउंडिंग-सर्किट-टकराव का पता लगाने की आवश्यकता होगी :-)
एक पूर्ण पिनबॉल में शामिल भौतिक की जटिलता को देखते हुए, मैं इसे देखने का सुझाव दूंगा। मौजूदा 2 डी भौतिक इंजन। Box2D की जावास्क्रिप्ट में काफी प्रतिष्ठा है, अन्य भी हो सकते हैं लेकिन मैंने किसी भी अच्छे (और मुक्त) का सामना नहीं किया।
Rq1: आप निश्चित रूप से (जैसा कि मैं करते हैं) अद्यतन और ड्रा के बीच अपने खेल में शास्त्रीय विभाजन। और आप एक टाइमर (सेटइंटरवल / सेटटाइमआउट) और / या रिक्वेस्टअनामेशनफ्रेम को कॉल अपडेट के लिए उपयोग करते हैं, फिर एक नियमित रूप से आकर्षित करते हैं। एक पिनबॉल खेल का प्रकार हो सकता है जहां आप एक टाइमर ड्राइविंग अपडेट और एक अन्य ड्रॉ ड्राइविंग करना चाहते हैं, ताकि आप प्रत्येक स्वतंत्र रूप से, विभिन्न प्रकार के उपकरणों पर काम कर सकें। क्योंकि आप डिवाइस को बहुत धीमा कर सकते हैं (अपडेट + ड्रा) नहीं कर सकते हैं: यदि दो अपडेट्स (dt) के बीच का समय बहुत लंबा हो जाता है, तो भौतिक इंजन की टक्कर छूट सकती है।


0

आप 2 डी बनाम 3 डी विषय के लिए भविष्य के पिनबॉल बनाम विज़ुअल पिनबॉल पर एक नज़र डाल सकते हैं। यदि आप दृश्य पिनबॉल खेलते हैं (सब कुछ 2 डी में बनाया गया है) तो भविष्य के पिनबॉल खेलते हैं, या ज़ेन पिनबॉल की तरह कुछ आप इस अंतर को महसूस करते हैं कि वे कैसे खेलते हैं। मैं व्यक्तिगत रूप से 3 डी को पसंद करता हूं, लेकिन आपकी परियोजना 2 डी के लिए बेहतर अनुकूल हो सकती है, केवल आप ही यह तय कर पाएंगे

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