वीडियो गेम में गोलियां कैसे काम करती हैं?


64

मुझे यह सवाल तब आया जब मैं C # में एक वीडियो गेम डिजाइन कर रहा था।

अगर हम बैटलफील्ड या कॉल ऑफ ड्यूटी जैसे खेलों पर विचार करते हैं, तो एक ही समय में सैकड़ों या हजारों गोलियां उड़ती हैं। घटनाओं को लगातार ट्रिगर किया जाता है, और जो मुझे पता है, उससे यह बहुत सारी प्रसंस्करण शक्ति चूसता है ... या करता है? मैं जानना चाहता हूं कि विभिन्न गेम डेवलपर्स (2 डी और 3 डी) गोलियों का प्रबंधन कैसे करते हैं और प्रत्येक के लिए सबसे कुशल तरीका क्या है।

मैंने प्रश्न पढ़ा कि वीडियो गेम में गोलियों का अनुकरण कैसे किया जाता है? लेकिन यह इस बात पर स्पर्श नहीं करता है कि कैसे प्रोग्राम डिजाइन के नजरिए से गोलियां काम करती हैं।

मेरे पास कुछ विचार थे, लेकिन प्रत्येक में अपनी कमियां हैं:


सबसे कुशल तरीका जो मैं सोच सकता था (2D गेम्स के लिए):

मान लीजिए कि मुझे बुलेट नामक एक वर्ग बनाना था, और हालांकि लंबे समय तक उपयोगकर्ता एक बटन दबाए रखता है, प्रत्येक 0.01 सेकंड में एक बुलेट ऑब्जेक्ट बनाया जाएगा। इस बुलेट में है:

  • 1 वेग

  • 2 यह कहाँ से गोली मारी जा रही है की प्रारंभिक स्थिति

  • 3 स्प्राइट बनावट

  • 4 एक हिट प्रभाव

चूंकि बुलेट का अपना वर्ग होगा, इसलिए यह ड्राइंग, मूविंग और एक्शन श्रोताओं को प्रबंधित कर सकता है।

क्या प्रोसेसर पर यह मुश्किल नहीं होगा कि इनमें से हजारों वस्तुओं को तुरंत चालू किया जाए, फिर नष्ट कर दिया जाए (जब ऑन-हिट प्रभाव शुरू हो जाए)? रैम स्पेस?


3 डी गेम के लिए कुशल तरीका - मुझे लगा कि एक और था:

कहते हैं कि मैं एक हथियार वर्ग बनाता हूं। इस हथियार में विभिन्न विशेषताएं हैं, जिनमें से कुछ:

  • 1 पता लगाएँ कि हथियार कहाँ निशाना लगा रहा है, और यह निर्धारित करें कि यह किसी लक्ष्य को देख रहा है या नहीं

  • 2 ट्रिगर बंदूक की शूटिंग का एक एनीमेशन

  • 3 में एक doDamage () विधि है जो बंदूक को इंगित करने वाले से स्वास्थ्य को घटाने के लिए कुछ इंगित करता है

  • 4 बटन दबाते ही बुलेट एनीमेशन क्लास सूचित करता है

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


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

मेरा सवाल यह है कि गेम निर्माता सबसे कुशल तरीका क्या है? क्या यह तरीका 2D से 3D गेम्स में बदलता है?


16
ध्यान दें कि आज भी, अधिकांश गेम गोलियों की उड़ान का अनुकरण नहीं करते हैं। "तेज़ पर्याप्त" माना जाने वाली किसी भी चीज़ के लिए, इसके बजाय एक साधारण हिटस्कैन किया जाता है - मूल रूप से, यह माना जाता है कि प्रभाव उसी समय होता है जब आप ट्रिगर दबाते हैं। किसी भी मामले में "सैकड़ों या हजारों गोलियां" वास्तव में एक बड़ी राशि नहीं है - यह कि कुछ गेम बहुत शुरुआती कंसोल (विभिन्न बुलेट-नरक गेम) के बाद से आज की मशीनों की तुलना में हजारों गुना कम शक्तिशाली हैं। आपको बस यह सुनिश्चित करने की ज़रूरत है कि प्रति बुलेट जितना कम काम संभव हो :) :)
लुआं

42
बुलेट आमतौर पर pew-pew-pewप्रौद्योगिकी के माध्यम से काम करते हैं :)
मंकीज़ेउस

5
एक ही समय में सैकड़ों या हजारों गोलियां उड़ती हैं। कोई बंदूक नहीं है जो उन्हें आग लगाती है। यहां तक ​​कि शक्तिशाली फालानक्स प्रति सेकंड 75 गोलियों में सबसे ऊपर है। विकिपीडिया पर सूचीबद्ध "प्रभावी फायरिंग रेंज" के आधार पर, गोलियां लगभग 3 सेकंड के लिए उड़ान भरती हैं, इसलिए एक फालानक्स एक बार में 225 गोलियां हवा में डाल सकता है। एक M16 लगभग 12 राउंड / सेकंड में सबसे ऊपर है और उस दर को बनाए नहीं रख सकता (अधिकतम निरंतर आग 0.25rounds / सेकंड के लिए है)। ऐसा नहीं है कि किसी भी समय कई बंदूकें फायरिंग करती हैं!
Cort Ammon

3
बस यह इंगित करने के लिए, वस्तुओं को अलग-अलग वर्ग बनाने के लिए कभी भी अच्छा नहीं होता है जब वे इतने सरल होते हैं। प्रत्येक प्रकार की बुलेट के लिए एक बुलेटफिल्ड उदाहरण होना बेहतर है। कोड लंबाई में मामूली ओवरहेड और whatnot आपको प्रति बुलेट एक अतिरिक्त 4 बाइट शब्द बचाएगा (यदि प्रकार एक पूर्णांक है)। साथ ही, एक ऑब्जेक्ट किसी सूची को आसानी से स्कैन कर सकता है।
द ग्रेट डक

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

जवाबों:


78

मैं निश्चित रूप से देख सकता हूं कि आप क्यों सोचेंगे कि उन लोगों को अनुकरण करना कठिन होगा, लेकिन उन्हें आसान बनाने के लिए गोलियों (सभी प्रोजेक्टाइल, वास्तव में) पर पर्याप्त बाधाएं हैं।

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

  2. हम जानते हैं कि वे कैसे आगे बढ़ेंगे, इसलिए उनके लिए स्टोर या गणना करने के लिए बहुत अधिक जानकारी नहीं है। आपकी सूची यथोचित रूप से सटीक थी, हमारे पास आम तौर पर इससे जुड़ी कुछ और चीजें होंगी, जैसे किसने गोली चलाई, और इसका प्रकार क्या है।

  3. चूंकि सभी प्रोजेक्टाइल बहुत समान होंगे, इसलिए हम उन्हें गतिशील रूप से बनाने के सभी ओवरहेड से बचने के लिए, पूर्व-आवंटित कर सकते हैं। मैं 1000 प्रोजेक्टाइल की एक सरणी आवंटित कर सकता हूं, और अब उन्हें सिर्फ एक सूचकांक के साथ एक्सेस किया जा सकता है, और वे सभी मेमोरी में अनुक्रमिक हैं, इसलिए उन्हें संसाधित करना त्वरित होगा।

  4. उनके पास एक निश्चित जीवनकाल / सीमा है, इसलिए मैं पुरानी गोलियों को समाप्त कर सकता हूं और बहुत तेजी से नई गोलियों में मेमोरी को रीसायकल कर सकता हूं।

  5. एक बार जब वे कुछ हिट करते हैं, तो मैं उन्हें भी समाप्त कर सकता हूं, इसलिए उनके पास एक जीवनकाल है।

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

  7. वे स्प्राइट्स (आमतौर पर) या कम पाली मॉडल के रूप में प्रस्तुत किए जाते हैं, और स्क्रीन पर बहुत कम जगह लेते हैं, इसलिए वे रेंडर करने के लिए तेज़ हैं।

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


12
मुझे 5 से असहमत होना चाहिए), जो वास्तव में पूरी चीज को आधुनिक खेलों में जटिल बनाता है। पहले के निशानेबाजों में यह स्वीकार्य था, आजकल भी सीओडी खिलाड़ियों को लकड़ी की दीवारों के माध्यम से शूट करने की अनुमति देता है। 6) किसी भी प्रतिस्पर्धी प्रणाली के लिए अस्वीकार्य होगा, हालांकि यह एक दुर्लभ समस्या होगी।
SBoss 7

17
@SBoss तो rephrase: "एक बार जब वे कुछ हिट करते हैं तो वे घुसना नहीं कर सकते, मैं उन्हें भी समाप्त कर सकता हूं, इसलिए उनके पास जीवन भर का समय है।" और 6 के लिए आप प्रति चरित्र अधिकतम आग दर का दोहन करके और फिर लंबाई की एक सरणी रखकर सबसे खराब स्थिति प्राप्त कर सकते हैंnum_characters * max_bullets_per_character
शाफ़्ट सनकी

14
@ मुझे लगता है कि # 6 उदाहरण के लिए अधिक है। टॉप-डाउन स्पेस गेम्स, जहां धीमी गति से चलने वाली बुलेट कुछ हिट / गायब होने से पहले एक बड़ी दूरी की ऑफ-स्क्रीन यात्रा कर सकती है। जाहिर है कि यह कॉड-टाइप गेम्स में कोई समस्या नहीं है, जहां गोलियां तेजी से चलती हैं और जल्दी से दुनिया की सीमा तक पहुंच जाती हैं।
ब्लूराजा - डैनी पफ्लुघोटे

1
खेल के विशाल बहुमत गोलियों (बाहरी बैलिस्टिक) को बिल्कुल भी प्रदर्शित नहीं करते हैं। अधिकांश गेम "हिट-स्कैनिंग" नामक एक तकनीक को रोजगार देते हैं।
एरन

45

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

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

अगला दृष्टिकोण निकाल दिया गया बुलेट को एक प्रक्षेप्य के रूप में मॉडल करना होगा, जिसे इसकी अपनी इकाई / वस्तु के रूप में बनाया गया है जो टकराव के अधीन है, और संभवतः गुरुत्वाकर्षण और / या वायु प्रतिरोध जो इसकी दिशा और वेग को बदल देता है। यह अतिरिक्त भौतिकी समीकरणों के कारण हिटस्कैन दृष्टिकोण से अधिक जटिल है, और वास्तविक बुलेट ऑब्जेक्ट होने के कारण अधिक संसाधन गहन है, लेकिन अधिक यथार्थवादी गोलियां प्रदान कर सकता है।

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

इन दृष्टिकोणों के लिए - हिटस्कैन और प्रोजेक्टाइल, दोनों को 2 डी या 3 डी गेम में स्वतंत्र रूप से उपयोग किया जा सकता है। यह अधिक निर्भर करता है कि हथियार क्या है, और निर्माता ने कैसे तय किया है कि हथियार काम करेगा।


डिज़ाइन पैटर्न, हिट्सकैन और क्वाड / ऑक्ट्रीज़ के बारे में जानकारी वास्तव में मदद करती है। इसके अलावा, जानकारी के लिए धन्यवाद!
एरिक

8
यदि आप एक हिटस्कैन पर मुकदमा नहीं करते हैं, लेकिन प्रोजेक्टाइल का अनुकरण करते हैं तो वे पतली वस्तुओं के माध्यम से ताना दे सकते हैं क्योंकि वे इतनी तेजी से आगे बढ़ते हैं। उस मामले में याद रखें कि खेलों में eveyrthing नकली है। भले ही एक गोली केवल कुछ सेंटीमीटर लंबी हो लेकिन आप टक्कर का पता लगा सकते हैं जैसे कि गोली एक मीटर लंबी है। इस तरह से आप अभी भी अच्छा बुलेट ड्रॉप और फ्लाइट सिमुलेशन का समय कर सकते हैं, बिना गोलियों के बारे में बहुत अधिक चिंता किए बिना उन वस्तुओं के माध्यम से वार करने के बिना :)।
रॉय टी।

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

3
@davidbak: यह विशिष्ट रूप से इन-गेम मुठभेड़ और गेम शैली से अपेक्षित यथार्थवाद पर निर्भर करता है। यदि आप ज्यादातर (केवल?) नजदीकी तिमाहियों का मुकाबला कर रहे हैं, तो वास्तव में, निष्ठा के उस स्तर की आवश्यकता नहीं है। लेकिन अगर लंबी दूरी की लड़ाई का विकल्प मौजूद है (जैसे अधिक आरपीजी जैसी सेटिंग में स्निपर्स, या तीरंदाज), तो मिसाइलों को प्रभावित करने वाला गुरुत्वाकर्षण आजकल अपेक्षित है। यदि आप अपने रॉकेट लॉन्चर को ऊपर की ओर निशाना बनाते हैं, तो आप अभी भी रॉकेट को कहीं और लैंड करने और विस्फोट करने की उम्मीद करेंगे, नहीं? फिर भी, प्रक्षेपवक्र की गणना हमेशा वास्तविक भौतिकी से नहीं की जाती है, बस एक अनुमान (प्रदर्शन कारणों के लिए)
हॉफमैले

1
खराब कंपनी 2 के बाद से @davidbak बैटलफील्ड में बुलेट ड्रॉप था। राइफल, पिस्तौल, टैंक के गोले, रॉकेट, सब कुछ। बैटलफील्ड 3 ओरिजिन पर फ्री है, आप (IIRC) चेक कर सकते हैं। बैटलफील्ड 4 के पास निश्चित रूप से यह 'फीचर' भी है। अन्य खेल जहाँ आप देख सकते हैं यह "स्निपर एलीट" है। 2 या 3 नए शीर्षक हैं। उस खेल में भौतिकी महत्वपूर्ण भूमिका निभाती है।
अपाचे

7

मैं किसी भी तरह से विशेषज्ञ नहीं हूं, लेकिन आपके सवाल का जवाब देने के लिए, हां, आपको उन कई चीजों की आवश्यकता होगी जिनका आप उल्लेख करते हैं।

अपने 2D उदाहरण के लिए, आप एक बुलेट के लिए एक स्थिति और वेग रख सकते हैं। (आपको अपनी गोलियों को लागू करने के तरीके के आधार पर जीवनकाल या अधिकतम दूरी की भी आवश्यकता हो सकती है।) जिसमें आमतौर पर 2 (x, y) मान शामिल होंगे। यदि वे तैर रहे थे, तो वह 16 बाइट्स थी। यदि आपके पास 100 गोलियां हैं, तो यह केवल 1600bytes या लगभग 1.5k है। यह आज एक मशीन पर कुछ भी नहीं है।

अगला, आप स्प्राइट्स का उल्लेख करते हैं। आपको प्रत्येक बुलेट का प्रतिनिधित्व करने के लिए केवल एक स्प्राइट की आवश्यकता होगी। इसका आकार इस बात पर निर्भर करता है कि आप कितनी गहराई पर चित्रित कर रहे हैं और यह स्क्रीन पर कितना बड़ा होना चाहिए। यहां तक ​​कि असम्पीडित, कहते हैं, 256x256 पूर्ण फ्लोट 32-बिट प्रति चैनल में, जो स्प्राइट के लिए 1 एमबी है। (और यह बहुत बड़ा होगा!) आप प्रत्येक बुलेट स्थान पर समान स्प्राइट आकर्षित करेंगे, लेकिन यह स्प्राइट की प्रत्येक प्रति के लिए अतिरिक्त मेमोरी नहीं लेता है। यह ऑन-हिट प्रभाव के लिए समान होगा।

आप हर 0.01 सेकंड में फायरिंग का उल्लेख करते हैं। यह आपके हथियार से प्रति सेकंड 100 गोलियां होगी। यहां तक ​​कि एक भविष्य के हथियार के लिए यह काफी कुछ है! इस विकिपीडिया लेख के अनुसार :

जब ट्रिगर खींचा जाता है, तो जिस दर पर गोलियां चलाई जाती हैं वह चक्रीय दर होती है। अग्नि की विशिष्ट चक्रीय दरें राइफल के लिए 600-900 RPM, कुछ मामलों में 1,000-1,100 RPM, सबमशीन गन और मशीन पिस्तौल के लिए 900-1,200 RPM और मशीन गन के लिए 600-1,200 RPM हैं। M134 Miniguns पर हमला हेलीकॉप्टर और अन्य लड़ाकू वाहनों पर चढ़कर 100 राउंड प्रति सेकंड (6,000 RPM) की आग की दर प्राप्त कर सकते हैं।

ताकि एक हमले के हेलीकाप्टर की दर होगी!

बैटलफील्ड / कॉल ऑफ ड्यूटी / आदि में वर्णित एक बड़ी दुनिया के लिए, वे उन सभी बुलेट पोज़िशन्स की गणना कर सकते हैं, लेकिन यदि कार्रवाई दूर नहीं है, तो उन सभी को न खींचें। या जब तक आप करीब नहीं पहुंचते, तब तक वे उनका अनुकरण नहीं कर सकते। (मुझे स्वीकार करना होगा कि मैं इस हिस्से पर थोड़ा अनुमान लगा रहा हूं क्योंकि मैंने किसी भी चीज पर काम नहीं किया है।)


6

क्या प्रोसेसर पर यह मुश्किल नहीं होगा कि इनमें से हजारों वस्तुओं को तुरंत चालू किया जाए, फिर नष्ट कर दिया जाए (जब ऑन-हिट प्रभाव शुरू हो जाए)? रैम स्पेस?

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

आजकल, हालांकि? आपके पास पिक्सेल के हजारों संचालन के लिए पर्याप्त प्रसंस्करण शक्ति है जो कि बनावट और प्रकाश व्यवस्था करने के लिए आवश्यक है। हजारों चलती वस्तुओं के साथ कोई समस्या नहीं है; यह आपको विनाशकारी इलाके (उदाहरण के लिए लाल गुट) करने की सुविधा देता है, जहाँ हर टुकड़ा अन्य टुकड़ों के साथ टकराव की प्रक्रिया करता है और एक बैलेन्स वक्र का अनुसरण करता है।

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

एक छोटा सा किस्सा: नेटवर्क कयामत का पहला संस्करण (90 का मूल) हर गोली के लिए नेटवर्क पर एक पैकेट भेजा। जब एक या अधिक खिलाड़ियों को मशीन गन मिली, तो यह नेटवर्क को आसानी से अभिभूत कर सकता है। 90 के दशक में विश्वविद्यालय में काम करने वाले लोगों के अवैध रूप से काम करने या नेटवर्क के अनुपयोगी होने पर अपने नेटवर्क प्रशासकों के साथ मुसीबत में पड़ने से भरे लोगों की भरमार थी।


मुझे आश्चर्य है कि
चैनसॉ

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

1

मैं एक विशेषज्ञ से बहुत दूर हूं लेकिन मैं अपने खाली समय में मल्टीप्लेयर 2 डी शूटर गेम पर काम कर रहा हूं।

मेरी विधि

क्लाइंट और सर्वर के बीच अलग-अलग बुलेट कक्षाएं हैं (ऑफ़लाइन खेलते समय भी, एक सर्वर उदाहरण एक अलग प्रक्रिया पर शुरू किया जाता है और 'मुख्य' गेम से जुड़ा होता है)।

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

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

ग्राहक के लिए, बुलेट की जानकारी वास्तव में नेटवर्क पर प्राप्त नहीं होती है (यह परीक्षण में बेकार साबित हुई), इसके बजाय प्रति-टिक अपडेट के भाग के रूप में प्रत्येक वर्ण में एक 'निकाल दिया' बूलियन है, जो कि यदि सही है तो ग्राहक एक स्थानीय बनाता है बुलेट ऑब्जेक्ट जो लगभग सर्वर वाले की तरह काम करता है, एकमात्र अंतर इसका स्प्राइट है।

इसका मतलब यह है कि यद्यपि आप जो बुलेट देखते हैं, वह सर्वर पर इसका पूरी तरह से सटीक प्रतिनिधित्व नहीं करता है, किसी भी खिलाड़ी पर यदि कोई अंतर होता है, तो यह मुश्किल से ही ध्यान देने योग्य होगा और नेटवर्क किसी भी विसंगतियों को दूर करता है।

विभिन्न तरीकों पर ध्यान दें

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

3D मॉडल के साथ, जिसमें जटिल हिटबॉक्स हो सकते हैं, यह साधारण बाउंडिंग बॉक्स FIRST के खिलाफ टक्करों का परीक्षण करने के लिए मानक है, और यदि वह सफल होता है, तो अधिक 'विस्तृत' टकराव का पता लगाने पर जाएं।


0

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

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