गेम प्रोग्रामिंग: सामान्य तरीके और डिजाइन पैटर्न [बंद]


9

मैंने एक बहुत ही सरल गेम इंजन लिखना शुरू कर दिया, ताकि मैं ओपनजीएल 3.x को बेहतर तरीके से सीख सकूं लेकिन चूंकि मेरी अनुभवहीनता और मेरे विरल ज्ञान के बारे में कि कैसे एक 3 डी गेम डिजाइन किया जाना चाहिए, मैं आमतौर पर उन समस्याओं में मिलता हूं जहां मुझे एहसास होता है कि मुझे अपनी कक्षाएं डिजाइन करनी चाहिए अलग ढंग से। अन्य समस्याओं का मैं सामना कर रहा हूं कि कैसे खेल में संक्षिप्त तरीके से समय का ध्यान रखें और आंदोलन को आवश्यकतानुसार अपडेट करें और रेंडरर को कैसे बताएं कि उसे फिर से तैयार करना है। इसके अलावा, मुझे एक वस्तु से दूसरी वस्तु पर विभिन्न झंडे गुजारने के लिए गेट और सेट फंक्शन बनाने की आवश्यकता है, क्या यह एक बुरा अभ्यास है?

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

Btw, मैं अभी भी freeglut का उपयोग कर रहा हूँ, क्या आप मुझे प्रगति से पहले या OpenGL की बेहतर समझ पाने के बाद एक बेहतर विंडोिंग सिस्टम में जाने की सलाह देंगे?


12
मानक "मैं एक इंजन लिख रहा हूं" प्रतिक्रिया = गेम लिखें, इंजन नहीं। इंजन एक गहरे खरगोश के छेद में गिर जाते हैं। आपने अब तक क्या शोध किया है? यहां आपको एकल, फ़ोकस किए गए मुद्दे और पिछले प्रश्नों की खोज करके सर्वोत्तम परिणाम प्राप्त होंगे। अपने खेल को लिखते समय नए मुद्दों पर खोज जारी रखें, एक समय में एक। एक साइड नोट के रूप में, यह महसूस करते हुए कि कक्षाओं को फिर से डिज़ाइन करने की आवश्यकता है, आम है और ऐसा करने की प्रक्रिया को "रिफैक्टरिंग" कहा जाता है, इसका मतलब है कि आप जा रहे हैं और यह एक अच्छी बात है।
पैट्रिक ह्यूजेस

1
आपके प्रतिक्रिया के लिए धन्येवाद। क्षमा करें यदि मैं स्पष्ट नहीं था, तो मैं वास्तव में एक पूर्ण गेम इंजन का निर्माण नहीं करना चाहता हूं, लेकिन मैं गेम डिजाइन में उपयोग किए जाने वाले कुछ मूल डिजाइन पैटर्न सीखना चाहूंगा ताकि मैं अपनी कक्षाओं को बेहतर ढंग से डिजाइन कर सकूं। मुझे लगता है कि आम समस्याओं के कुछ सामान्य समाधान होने चाहिए। मैं डिजाइन में जितना गहरा जाऊंगा, उतनी ही समस्याएं पैदा होती रहेंगी और जवाब ढूंढना उतना ही मुश्किल होगा। मेरा शोध अब तक बहुत फलदायी नहीं रहा है, एक अच्छा ट्यूटोरियल मुझे मिला जो एक गेम के निर्माण में गहराई से जाता है, कोडप्रोजेक्ट है ।Articles/27219/…
ग्रिएवरहार्ट

1
मैं देख रहा हूं, "गेम इंजन कॉमन मेथड्स" को हेडिंग में डालकर चर्चा की ओर ... इंजन =) किसी भी मामले में, आपको जिस चीज की तलाश है उसे प्राप्त करने में कठिनाई हो रही है, क्योंकि इसमें बहुत सारे हैं विभिन्न प्रकार के खेल जैसे कि एक मायन कैलेंडर में वर्ष होते हैं और प्रत्येक प्रकार की अपनी आवश्यकताएं होती हैं। आपके पास बेहतर परिणाम हो सकते हैं यदि आप एक विशिष्ट प्रकार के खेल की तलाश करते हैं, तो पहले व्यक्ति शूटर बहुत आम है, जो खोज इंजन को कुछ कर्षण देता है।
पैट्रिक ह्यूजेस

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

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

जवाबों:


11

मैं लगभग 2 महीने पहले आपके चरण में था, तब से मैं एक उचित उत्तर लिखूंगा।

मैंने एक बहुत ही सरल गेम इंजन लिखना शुरू कर दिया, ताकि मैं ओपनजीएल 3.x को बेहतर तरीके से सीख सकूं लेकिन चूंकि मेरी अनुभवहीनता और मेरे विरल ज्ञान के बारे में कि कैसे एक 3 डी गेम डिजाइन किया जाना चाहिए, मैं आमतौर पर उन समस्याओं में मिलता हूं जहां मुझे एहसास होता है कि मुझे अपनी कक्षाएं डिजाइन करनी चाहिए अलग ढंग से।

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

अन्य समस्याओं का मैं सामना कर रहा हूं कि कैसे खेल में संक्षिप्त तरीके से समय का ध्यान रखें और आंदोलन को आवश्यकतानुसार अपडेट करें और रेंडरर को कैसे बताएं कि उसे फिर से तैयार करना है।

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

इसके अलावा, मुझे एक वस्तु से दूसरी वस्तु पर विभिन्न झंडे गुजारने के लिए गेट और सेट फंक्शन बनाने की आवश्यकता है, क्या यह एक बुरा अभ्यास है?

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

यह सब अनुभव की बात है। आप एक कैमरा क्लास लिखेंगे, फिर आप देखेंगे कि ट्रांसफॉर्मेशन मैट्रिसेस के बगल से आप क्या फंक्शनलिटी चाहते हैं। यदि आप कोई तात्कालिक सुझाव चाहते हैं, तो मुझे कहना होगा कि नंगे हड्डियों को लागू करें, बाद में विस्तार करें।

लेख और पुस्तकें:

  • खेल इंजन विकास

ये किताबें आधुनिक खेल इंजनों और पाइपलाइनों की वास्तुकला के बारे में बात करती हैं। वे आपको अंतर्निहित तकनीक पर एक अच्छा अवलोकन देंगे। मैं पहली पुस्तक की सिफारिश करता हूं यदि आपको चुनना है, तो यह कुछ तकनीकों के प्रति "कम पक्षपातपूर्ण" है, हालांकि अंत में आप दोनों के माध्यम से प्राप्त करना चाहते हैं क्योंकि वे ज्ञान के महान स्रोत हैं।

http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135

http://www.amazon.com/Game-Coding-Complete-Third-Edition/dp/1584506806

  • ओपन

http://ogldev.atspace.co.uk/index.html

http://www.arcsynthesis.org/gltut/index.html

http://www.opengl.org/sdk/docs/man3/

  • GLSL

http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/glsl-core-tutorial-index/

http://www.opengl.org/sdk/docs/manglsl/

  • टक्कर की पहचान हुई है

http://www.peroxide.dk/papers/collision/collision.pdf

(मैं इसे लिंक कर रहा हूं क्योंकि मुझे लेखों को खोजने में मुश्किल हुई कि कैसे 3 डी टक्कर का पता लगाया जाता है।

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

Btw, मैं अभी भी freeglut का उपयोग कर रहा हूँ, क्या आप मुझे प्रगति से पहले या OpenGL की बेहतर समझ पाने के बाद एक बेहतर विंडोिंग सिस्टम में जाने की सलाह देंगे?

WinAPI, अगर आपको लगता है कि आपके पास विंडोज प्रोग्रामिंग सीखने का समय और इच्छा है (यदि आप विंडोज के लिए विकसित कर रहे हैं)। FreeGLUT सीखने के लिए ठीक है, लेकिन अंततः आप अधिक कार्यक्षमता चाहते हैं। हालाँकि, यदि आप पूरी तरह से दूसरे मार्ग पर जाना चाहते हैं तो आप एसएफएमएल या एसडीएल जैसे पुस्तकालयों के साथ ओपनजीएल लॉन्च कर सकते हैं। FreeGLUT के साथ रहो, जब तक तुम मेरी तरह जिद्दी नहीं हो। मैं सीधे WinAPI के लिए चला गया।


हे dreta, बहुत अच्छा जवाब के लिए बहुत बहुत धन्यवाद मैं इसके लिए इंतजार कर रहा था: P! सौभाग्य से, मैं पहले से ही जानता हूं कि टकराव का पता कैसे लगाया जाए क्योंकि मैंने पहले से ही भौतिकी सिमुलेशन के लिए कुछ एल्गोरिदम लागू किए हैं :)।
ग्रिएवरहार्ट

@ user1294203 भयानक, मैं बाहर शुरू करने के दौरान खो गया था, तो बस इसे मामले में पोस्ट किया
dreta

यदि आप प्लेटफ़ॉर्म विशिष्ट कोड के साथ बहुत अधिक गड़बड़ नहीं करना चाहते हैं तो मैं एसएफएमएल को वोट देता हूं। यह छोटा, आसान, साफ है, और आप यह समझने के लिए कोड में आसानी से गोता लगा सकते हैं कि यह उदाहरण के लिए WinAPI को कैसे लपेटता है।
एडिन-एम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.