जवाबों:
पिछले दिनों (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 डी संपत्ति का उपयोग कर रहे थे।
पिनबॉल में भौतिकी के बहुत समृद्ध सेट होते हैं, जिसमें न केवल छेद या दीवारें होती हैं, बल्कि प्रतिक्रियाशील तत्व (पीछे की ओर) या असमान सतह होती है, जहाँ गेंद धीमी हो जाती है और फिर वापस गति हो जाती है।
यदि आप एक अच्छा पिनबॉल बनाना चाहते हैं, तो जाने का रास्ता या तो एक 3 डी टक्कर का पता लगाने का उपयोग करना है, या दूरी और वेग मापदंडों के साथ एक विधि होने वाली प्रत्येक ठोस वस्तु के साथ स्व-अनुरूप प्रणाली है, बदले हुए वेगों को वापस करना है।
मैंने थोड़ी देर पहले एक पिनबॉल खेल बनाया; यह पिक्सेल आधारित भी था। मेरे पास एक टक्कर का नक्शा था जिसमें सिर्फ टक्कर के डेटा थे। एक सामान्य टक्कर सामान्य को खोजना आसान था:
गेंद को ओवरलैप करते हुए टक्कर के नक्शे का क्षेत्र लें, केंद्र ढूंढें, उस बिंदु से गेंद केंद्र तक वेक्टर बनाएं, फिर सामान्य करें।
आशा है कि आप कुछ विचार देता है :)
यदि आप एक पिनबॉल खेल बनाते हैं, तो आपको सबसे अधिक संभावना बाउंडिंग बॉक्स की तुलना में अधिक बाउंडिंग-सर्किट-टकराव का पता लगाने की आवश्यकता होगी :-)
एक पूर्ण पिनबॉल में शामिल भौतिक की जटिलता को देखते हुए, मैं इसे देखने का सुझाव दूंगा। मौजूदा 2 डी भौतिक इंजन। Box2D की जावास्क्रिप्ट में काफी प्रतिष्ठा है, अन्य भी हो सकते हैं लेकिन मैंने किसी भी अच्छे (और मुक्त) का सामना नहीं किया।
Rq1: आप निश्चित रूप से (जैसा कि मैं करते हैं) अद्यतन और ड्रा के बीच अपने खेल में शास्त्रीय विभाजन। और आप एक टाइमर (सेटइंटरवल / सेटटाइमआउट) और / या रिक्वेस्टअनामेशनफ्रेम को कॉल अपडेट के लिए उपयोग करते हैं, फिर एक नियमित रूप से आकर्षित करते हैं। एक पिनबॉल खेल का प्रकार हो सकता है जहां आप एक टाइमर ड्राइविंग अपडेट और एक अन्य ड्रॉ ड्राइविंग करना चाहते हैं, ताकि आप प्रत्येक स्वतंत्र रूप से, विभिन्न प्रकार के उपकरणों पर काम कर सकें। क्योंकि आप डिवाइस को बहुत धीमा कर सकते हैं (अपडेट + ड्रा) नहीं कर सकते हैं: यदि दो अपडेट्स (dt) के बीच का समय बहुत लंबा हो जाता है, तो भौतिक इंजन की टक्कर छूट सकती है।
आप 2 डी बनाम 3 डी विषय के लिए भविष्य के पिनबॉल बनाम विज़ुअल पिनबॉल पर एक नज़र डाल सकते हैं। यदि आप दृश्य पिनबॉल खेलते हैं (सब कुछ 2 डी में बनाया गया है) तो भविष्य के पिनबॉल खेलते हैं, या ज़ेन पिनबॉल की तरह कुछ आप इस अंतर को महसूस करते हैं कि वे कैसे खेलते हैं। मैं व्यक्तिगत रूप से 3 डी को पसंद करता हूं, लेकिन आपकी परियोजना 2 डी के लिए बेहतर अनुकूल हो सकती है, केवल आप ही यह तय कर पाएंगे