"नौसिखिए" खेल परियोजनाओं से परे


22

मैं इस उत्तर को गणित के प्रकार पर पढ़ रहा था जिसे एक गेम डेवलपर को पता होना चाहिए और यह हिस्सा वास्तव में मुझ पर खड़ा था:

How do I move my game object? The novice might say:

"I know! I'll just do:" object.position.x++.

यही कारण है कि मैं ऐसा करने के लिए सोचूंगा इसलिए मुझे लगता है कि मेरा कौशल स्तर दिखाता है। कम से कम 2 डी साइड-स्क्रॉलिंग के प्रकार के लिए, आर्केड-शैली के खेल जो मैंने अतीत में किए हैं, बस मुझे इसकी आवश्यकता है। वह और थोड़ा त्रिकोणमिति।

वास्तव में, मैंने उस पोस्ट को पढ़ने से पहले बहुत रैखिक बीजगणित या यहां तक ​​कि quaternions के बारे में नहीं सुना है। क्या यह इसलिए है क्योंकि ये गणित तब तक दिखाई नहीं देता है जब तक आप 3 डी के साथ काम नहीं करते हैं या ऐसा इसलिए है क्योंकि मेरे 2 डी गेम काफी सरल हैं कि मैं भोले-भाले क्रियान्वयन से दूर हो गया।

अनुवर्ती प्रश्न: यदि मैं उस प्रकार के गणित से परिचित होना चाहता हूं, तो मुझे किस प्रकार की परियोजनाएं शुरू करनी चाहिए? IE: एक खेल इंजन लिखें, एक 3 डी खेल पर काम करते हैं, आदि।


1
khanacademy.org शुरुआती और उन्नत गणित सीखने के लिए बहुत अच्छा है। प्लस चिकित्सा उपलब्धियों! किसी भी उबाऊ शिक्षा को प्राप्त करने के लिए गेम थ्योरी जैसा कुछ भी नहीं।
deceleratedcaviar

जवाबों:


16

इसके साथ असली चाल उच्च विद्यालय-स्तरीय विज्ञान है; जो आपको करना चाहिए था। इस घटना में कि आपने त्वरित Google खोज नहीं की है, आपको आरंभ कर देगा । यह समझाने के लिए कि आप 'नौसिखिया' मानसिकता से कैसे बचें, चंद्र लैंडर उदाहरण लेते हैं ।

एक बार जब आप पढ़ लेते हैं कि [change in position] = [velocity] * [time passed]यह स्पष्ट हो जाता है कि उन चर का ट्रैक रखने की आवश्यकता होगी:

float x, y; // Your X and Y co-ordinates.
float vx, vy; // Your X and Y velocity.
float deltaTime; // Change in time.

इसके बाद आप बस प्रत्येक फ्रेम में स्थिति के लिए वेग लागू करेंगे:

// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;

अब हम प्रत्येक फ्रेम के वेग को बदलना चाहेंगे ताकि हम गुरुत्वाकर्षण को जोड़ सकें। ठीक उसी स्रोत के अनुसार [change in velocity] = [acceleration] * [time passed]। इसलिए हम उसी सिद्धांत को लागू कर सकते हैं:

const float gravity = 9.8f; // The gravity of the earth.

// Add gravity to the vertical velocity.
vy = vy + gravity * deltaTime;
// Change X by the velocity multiplied by the time.
x = x + vx * deltaTime;
y = y + vy * deltaTime;

अब आपको खिलाड़ी को अपने अंतरिक्ष यान को नियंत्रित करने के लिए एक रास्ता चाहिए। बुनियादी भौतिकी के बारे में अधिक पढ़ने से आप सीखेंगे कि गति बल का परिणाम है - मुझे कोई स्रोत नहीं मिल सकता है लेकिन [change in acceleration] = ([force] / [mass]) * time(जहाँ तक मुझे याद है)। इसलिए जब खिलाड़ी एक कुंजी दबाता है तो आप बस fxऔर fyचर को किसी चीज़ में सेट कर देंगे और अपने अपडेट के दौरान समीकरण को लागू करेंगे।

अंततः आपको अपने खेल में वस्तुओं के आस-पास भौतिकी के बारे में सोचने की ज़रूरत है - और इसके बजाय उन्हें उस तरीके से आगे बढ़ने की कोशिश करें जिस तरह से आप सोचते हैं, बल्कि समीकरण देखेंगे

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

कौन सा खेल आपको सिखाएगा कि सही मानसिकता में कैसे सोचा जाए?

आप कैसे परीक्षण करेंगे कि आपने चीजों को सही ढंग से और सही मानसिकता के साथ किया है? Sleep(10 milliseconds)अपने गेम लूप में एक डालें और सब कुछ अभी भी चलना चाहिए और पूर्ण फ्रैमरेट के समान प्रतिक्रिया करना चाहिए।

अंत में, कृपया 3D से अच्छे से दूर रहें (और Quaternions और Matrices लागू करें) जब तक कि आपके पास 2D गेम्स को काम करने का अच्छा अनुभव न हो। मैं यह कहने के लिए उद्यम करूंगा कि काफी कुछ गेम डेवलपर्स वास्तव में नहीं जानते हैं कि क्वाटरनियन या मेट्रिसेस कैसे काम करते हैं - लेकिन केवल यह जानते हैं कि उनका उपयोग कैसे करें - बहुत बाद में उनसे संपर्क करें (या कभी नहीं, 2 डी गेम बहुत मज़ेदार हैं और काफी हो सकते हैं सफल)। आपको वास्तव में रैखिक बीजगणित जानने की जरूरत नहीं है और इसलिए बुनियादी स्तर पर ऐसा करने के लिए (लेकिन यह वास्तव में मदद करता है, इसलिए यदि आप कर सकते हैं तो कुछ रात की कक्षाओं में जाएं)।

अंतिम बोनस: एक बात जो मेरे कला शिक्षक ने मुझे हमेशा बताई है, "जो आप सोचते हैं उसे न देखें, जो आप देखते हैं उसे आकर्षित करें।" यहाँ एक ही बात लागू होती है "आप जो सोचते हैं वह मॉडल न करें ( object.position++), मॉडल क्या होता है (` ऑब्जेक्ट.पोजिशन + = वेलोसिटी * टाइम) "- कम से कम उचित सीमा तक (आप पूरी तरह से सटीक सिस्टम मॉडलिंग नहीं कर रहे हैं, लेकिन बनाते हैं कुछ ऐसा है जो एक अच्छा उत्थान है)।


मुझे परीक्षण के लिए कृत्रिम अंतराल डालने का आपका विचार पसंद है। इसके अलावा, पृथ्वी का गुरुत्वाकर्षण 9.8 है, 9.1 नहीं
स्टीव

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

इस स्तर पर @chaosTechnician "आपको क्या लगता है" होता है object.position++। मैं जवाब स्पष्ट करूंगा।
जोनाथन डिकिंसन

-1 के लिए instead of trying to make them move in the way you would think, rather look up the equation। यह समीकरणों को समझने के बारे में है, न कि उन्हें देखने के लिए। जो सबसे महत्वपूर्ण है वह खेल को मज़ेदार बना रहा है, और कौन जानता है, शायद आप पाएंगे कि कुछ चर-त्वरण गुरुत्वाकर्षण को अधिक मज़ेदार बनाते हैं। लेकिन यह बहुत मुश्किल होने वाला है कि यदि आप समीकरणों को नहीं समझते हैं तो यह कैसे करें ।
ब्लूराजा - डैनी पफ्लुगुएफ्ट

3
@ BlueRaja-DannyPflughoeft, जो वास्तव में मैंने उसे समझाया है: पहली जगह में समीकरण को नहीं जानने का मतलब है कि आप इसे कभी नहीं समझ सकते हैं - और उन्हें समझने का एकमात्र तरीका उन्हें वास्तविक स्थिति में उपयोग करना है।
जोनाथन डिकिंसन

3

मुझे लगता है कि आपके द्वारा लिंक किए गए उत्तर के कुछ हिस्से उनकी प्रस्तुति में थोड़ा संभ्रांत हैं। सदिश गणित के गुणों को बढ़ाते हुए फिर कहते हैं कि एक वस्तु को एक स्थिति, दिशा और त्वरण की आवश्यकता है, असंगत रूप से विशिष्ट है क्योंकि यह वास्तव में बस कुछ करने के लिए उबालने वाला है, जैसे object.position.x += (object.velocity.x + object.acceleration.x) * deltaTimeकि, मौलिक रूप से, इससे अलग नहीं है object.position.x++। घूर्णन का प्रतिनिधित्व करने के कई तरीकों में से एक है Quaternions; मैं उन्हें पसंद करता हूं लेकिन वे 3D घुमाव को समझने के लिए आवश्यक नहीं हैं। बहुत से Quaternion उपयोगकर्ता के बावजूद, वे घूर्णी गणित के पवित्र कंघी बनानेवाले की रेती नहीं हैं।

रैखिक बीजगणित के सिद्धांत सरल 2 डी आंदोलन, रोटेशन आदि में मौजूद हैं, लेकिन गणित अधिक सरल है क्योंकि केवल दो आयाम हैं। यहाँ एक उदाहरण है

रैखिक बीजगणित के अपने ज्ञान को सीखने / सुधारने के बहुत सारे तरीके हैं:

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

अंत में, यदि आपके गेम का डिज़ाइन जटिल गणित के लिए नहीं कहता है, तो इसका उपयोग न करें। :) लेकिन, निश्चित रूप से, ऐसा नहीं है कि आप एक खेल है कि डिजाइन करने में तल्लीन करने से रोकते हैं।


0

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

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

3 डी गणित सीखना आमतौर पर 3 डी अंतरिक्ष में एक साधारण वस्तु (जैसे एक घन) रखने के साथ शुरू होता है, और एक चल कैमरा कार्यान्वित करता है जो विभिन्न दृष्टिकोणों से उस वस्तु को देख सकता है, और वह परिप्रेक्ष्य चीजों को और भी सरल रखने के लिए ऑर्थोगोनल शुरू कर सकता है। यह आपकी स्क्रीन का प्रतिनिधित्व करने वाले एक 3D विमान पर बिंदुओं के बारे में है ( यहां सूत्र , आप इसे y के अलावा x और z अक्ष तक बढ़ा देंगे)। वास्तव में, यह किसी भी 3 डी इंजन को लिखने की शुरुआत है, जो आपके अनुभव के स्तर के बावजूद है। फ्लैश और प्रोसेसिंग.जेएस कुछ इस तरह से आसानी से प्रोटोटाइप करने के दो शानदार तरीके हैं।


0

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

भौतिकी लाइब्रेरी बनाने या विघटित करने का प्रयास करें जो टकराव से निपटने और सामान्य 2 डी आकृतियों के लिए प्रतिक्रिया को कवर करेगा। रैखिक बीजगणित टकराव के लिए प्रक्षेपवक्र वैक्टर की गणना के लिए बहुत उपयोगी है। त्रिकोणमिति में प्रयुक्त इकाई चक्र से डॉट उत्पाद काफी संबंधित है। फिर भी, 3 डी में इसे लागू करते समय कठोर शरीर भौतिकी की जटिलता तेजी से बढ़ जाती है।

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


0

यदि आप 2D गेम लिख रहे हैं, तो आप शायद पहले से ही रैखिक बीजगणित का उपयोग कर रहे हैं .. आप इसे नहीं जानते हैं! औपचारिक रूप से वैक्टर के बारे में कम से कम मूल बातें सीखना बहुत आसान है, लेकिन अन्यथा-जटिल आंदोलन के बारे में सोच को सरल बनाने में एक लंबा रास्ता तय करता है।

उदाहरण के लिए, हमें यहां बहुत सारे सवाल मिलते हैं कि घुमावदार आंदोलन को अनुकरण करने के लिए कौन से समीकरणों का उपयोग करना है, जैसे कि एक तोप से गोली मार दी गई तोप, या एक घर-मिसाइल। लेकिन अगर आप वैक्टर को समझते हैं, तो आपको केवल "समीकरण" की आवश्यकता है, जो दो वैक्टर को एक साथ जोड़ने के लिए है। इतना ही नहीं, बल्कि एयर-ड्रैग या घर्षण जैसी चीजों को जोड़ना अविश्वसनीय रूप से सरल हो जाता है - बस ड्रैग-वेक्टर की गणना करें, और इसे वेग में जोड़ें। Presto!

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