मुझे यह सवाल तब आया जब मैं C # में एक वीडियो गेम डिजाइन कर रहा था।
अगर हम बैटलफील्ड या कॉल ऑफ ड्यूटी जैसे खेलों पर विचार करते हैं, तो एक ही समय में सैकड़ों या हजारों गोलियां उड़ती हैं। घटनाओं को लगातार ट्रिगर किया जाता है, और जो मुझे पता है, उससे यह बहुत सारी प्रसंस्करण शक्ति चूसता है ... या करता है? मैं जानना चाहता हूं कि विभिन्न गेम डेवलपर्स (2 डी और 3 डी) गोलियों का प्रबंधन कैसे करते हैं और प्रत्येक के लिए सबसे कुशल तरीका क्या है।
मैंने प्रश्न पढ़ा कि वीडियो गेम में गोलियों का अनुकरण कैसे किया जाता है? लेकिन यह इस बात पर स्पर्श नहीं करता है कि कैसे प्रोग्राम डिजाइन के नजरिए से गोलियां काम करती हैं।
मेरे पास कुछ विचार थे, लेकिन प्रत्येक में अपनी कमियां हैं:
सबसे कुशल तरीका जो मैं सोच सकता था (2D गेम्स के लिए):
मान लीजिए कि मुझे बुलेट नामक एक वर्ग बनाना था, और हालांकि लंबे समय तक उपयोगकर्ता एक बटन दबाए रखता है, प्रत्येक 0.01 सेकंड में एक बुलेट ऑब्जेक्ट बनाया जाएगा। इस बुलेट में है:
1 वेग
2 यह कहाँ से गोली मारी जा रही है की प्रारंभिक स्थिति
3 स्प्राइट बनावट
4 एक हिट प्रभाव
चूंकि बुलेट का अपना वर्ग होगा, इसलिए यह ड्राइंग, मूविंग और एक्शन श्रोताओं को प्रबंधित कर सकता है।
क्या प्रोसेसर पर यह मुश्किल नहीं होगा कि इनमें से हजारों वस्तुओं को तुरंत चालू किया जाए, फिर नष्ट कर दिया जाए (जब ऑन-हिट प्रभाव शुरू हो जाए)? रैम स्पेस?
3 डी गेम के लिए कुशल तरीका - मुझे लगा कि एक और था:
कहते हैं कि मैं एक हथियार वर्ग बनाता हूं। इस हथियार में विभिन्न विशेषताएं हैं, जिनमें से कुछ:
1 पता लगाएँ कि हथियार कहाँ निशाना लगा रहा है, और यह निर्धारित करें कि यह किसी लक्ष्य को देख रहा है या नहीं
2 ट्रिगर बंदूक की शूटिंग का एक एनीमेशन
3 में एक doDamage () विधि है जो बंदूक को इंगित करने वाले से स्वास्थ्य को घटाने के लिए कुछ इंगित करता है
4 बटन दबाते ही बुलेट एनीमेशन क्लास सूचित करता है
मैं तब एक स्थिर वर्ग बना सकता हूं, BulletAnimation कहता हूं, कि इस बात की सूचना मिल सकती है कि बंदूक कहां से चल रही है, जहां उस बंदूक को (बुलेट गंतव्य के लिए) इंगित किया गया है, और बुलेट के लिए उपयोग करने के लिए एक उपयुक्त स्प्राइट और वेग की जानकारी है। । बंदूक से दागी जाने वाली गोली का अनुकरण करने के लिए दोनों वर्गों और वांछित स्प्राइट के आधार पर यह वर्ग फिर स्प्राइट्स (एक नए धागे पर, आइडीके) खींचता है।
उत्तरार्द्ध कोड के लिए बहुत कठिन लगता है, और क्या यह एक बार में हजारों गोलियों के लिए ऐसा करने के लिए लगातार कॉल करने के लिए बहुत सारी प्रसंस्करण शक्ति नहीं लेगा? शुरुआत और समाप्ति दोनों स्थितियों में लगातार अपडेट प्राप्त करना कठिन होगा।
मेरा सवाल यह है कि गेम निर्माता सबसे कुशल तरीका क्या है? क्या यह तरीका 2D से 3D गेम्स में बदलता है?
pew-pew-pew
प्रौद्योगिकी के माध्यम से काम करते हैं :)