2009-03-30 14 views
14

उदाहरण के लिए, Fallout 3 में, एक सेव गेम गेम में प्रत्येक ऑब्जेक्ट और एनपीसी के राज्य और स्थान को संग्रहीत करता है, और केवल कुछ एमबी लेता है। वे यह काम कैसे करते हैं!?!?वीडियो गेम बड़ी मात्रा में डेटा को कुशलतापूर्वक स्टोर/पुनर्प्राप्त कैसे करते हैं?

और फिर, गेम खेलने के दौरान, इस डेटा का किस जोड़ा जाता है/में/पुनः प्राप्त स्मृति से ऐसी है कि वह वास्तविक समय में खिलाड़ी के लिए प्रदर्शित किया जा सकता?

UPDATED: (मैं आप अपने जवाब के लिए काम करने के लिए जा रहा हूँ: पी)

केविन क्रोवेल्ल के जवाब के आधार पर ... तो मुझे लगता है कि आप एक प्रतिपादन दूरी है कि वस्तुओं पर लागू होगा होता और एनपीसी, और आप दिए गए सीमा के भीतर वस्तुओं और एनपीसी के "चयन" करेंगे। हालांकि, इन वस्तुओं को प्राप्त करने के लिए आप किस प्रकार का डेटा स्टोर उपयोग करेंगे?

दूसरे शब्दों में, आप आप खेल में हर वस्तु का एक विशाल सरणी के लिए होता है, और लगातार एक छोटे सूची है कि प्रस्तुत करने के लिए दृश्य वस्तुओं रखती अद्यतन? यदि आप अंत में खेल में हर वस्तु को छुआ

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

उत्तर

12

आजकल सभी बड़े कठिनाइयों के साथ, यहां तक ​​कि डेवलपर्स भी भूल जाते हैं कि मेगाबाइट में कितने बाइट हैं। तो शीर्षक में प्रश्न का उत्तर देने के लिए: गेम savegames बनाने के द्वारा बड़ी मात्रा में डेटा स्टोर करते हैं जो कई मेगाबाइट बड़े होते हैं।

यह बताते हुए कि मेगाबाइट कितना बड़ा है, यह 8 मिलियन बिट्स है। यह 2^8000000 = 10^2666666 राज्यों को एन्कोड करने के लिए पर्याप्त है। इसकी तुलना में, ब्रह्मांड में केवल 10^80 परमाणु हैं। अब एक (सेव) गेम में अलग-अलग राज्यों के साथ कई उपप्रणालीएं हैं; जैसे एक आरपीजी में प्रत्येक एनपीसी का अपना राज्य होता है। लेकिन वास्तव में एक राज्य कितना है? किसी शहर में उनकी स्थिति 16 बिट्स के रूप में सहेजी जा सकती है (क्या आपको उनकी सटीक स्थिति याद है यदि वे किसी भी तरह से घूम रहे हैं?)। उनकी मनोदशा/स्वभाव/आदि एक और 8 बिट्स के रूप में, और कुछ भावनाओं के लिए कुछ भावनाओं की अनुमति देता है।

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

+0

दोस्त है .. कोई भी वोट या कुछ भी नहीं, लेकिन पृथ्वी पर कैसे आप ब्रह्मांड में परमाणुओं की मात्रा जानते हैं? (मैं एक स्रोत के लिए नहीं पूछ रहा हूं कि मैं यह मुद्दा बना रहा हूं कि जहां तक ​​मुझे पता है कि उन्हें अभी तक समाप्त होने पर पता नहीं चला है।) क्या आपका मतलब आकाशगंगा में था? यही कारण है कि एक छोटे से अधिक प्रशंसनीय होगा। वास्तव में हमारी आकाशगंगा में – fauxCoder

+3

10^69। सटीक सीमाएं कि ज्यादा फर्क नहीं है, वास्तव में। वहाँ कारणों की एक संख्या के लिए है कि 10^80 अनुमान में त्रुटि मार्जिन के बहुत सारे है। – MSalters

+0

क्षमा बंद विषय लेकिन [इस वीडियो] (http://www.youtube.com/watch?v=8GEebx72-qs) इस सवाल का एक छोटा सा गहरा का पता लगाने ... –

8

यह बस मानचित्रण वस्तुओं, या NPCs, एक एक्स, वाई के लिए किया जा सकता है, जेड निर्देशांक समतल। वह जानकारी जो सस्ती रूप से संग्रहीत की जाती है।

गेमप्ले के दौरान

, उन वस्तुओं के सभी अभी भी हर समय एक समन्वय प्रणाली को मैप किया जाता है। उन्हें केवल बचत जानकारी में पढ़ने और वहां से शुरू करने की आवश्यकता है।

+0

+1 क्योंकि आपका (उस समय) अंक '666' थे। ;-) इसके अलावा, अच्छा जवाब! – dna123

+1

+1 क्योंकि आपके (उस समय) अंक 723 –

+0

ऑब्जेक्ट्स में आमतौर पर अधिक स्थिति होती है जिसे केवल उनकी स्थिति से ही बनाए रखने की आवश्यकता होती है, हालांकि ... – snemarch

3

आप जानकारी के बारे में सोचते हैं, तो आप यह वास्तव में है कि काफी नहीं है को बचाने के लिए की जरूरत है;

उदा।

  • स्थिति
  • अभिविन्यास
  • इन्वेंटरी
  • स्वास्थ्य
  • उद्देश्य राज्य

वहाँ निश्चित रूप से अधिक बहुत सारे, जिनमें से कई दोनों खेल के प्रकार और कैसे पर dependend हैं बचत संरचना का आयोजन किया जाता है।

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

यह कैसे डेटा को पुनर्प्राप्त/संशोधित किया जाता है, मुझे पूरा यकीन नहीं है कि मैं समझता हूं। यह कंसोल मेमोरी में सिर्फ डेटा है। जब खिलाड़ी सहेजने वाले डिवाइस पर लिखा जाता है, और जब वे इसे बहाल करते हैं।

2

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

8

मुझे लगता है कि आप संग्रहीत/पुनर्प्राप्त किए जाने की जटिलता को अधिक महत्व दे रहे हैं। आपको ऑब्जेक्ट्स, या उनके बनावट, या किसी भी चीज के लिए 3 डी मॉडल स्टोर करने की ज़रूरत नहीं है जो गेम के आकार-ऑन-डिस्क के बड़े हिस्से बनाते हैं।

सबसे पहले, अराजकता के अनुसार, केवल स्थानांतरित होने वाली चीज़ों के बारे में जानकारी संग्रहीत करना आवश्यक है। फिर भी, आपको शायद उनमें से प्रत्येक के लिए, नई स्थिति और अभिविन्यास (केवल यह माना जाता है कि इसमें शामिल अन्य चर शामिल नहीं हैं, जैसे "क्षतिग्रस्त")। तो यह प्रत्येक ऑब्जेक्ट के लिए दो वैक्टर है, जो प्रति वस्तु 24 बाइट्स के कुल योग के आसपास होगा। इसका मतलब है कि आप प्रति मेगाबाइट 40,000 वस्तुओं के लिए जानकारी स्टोर कर सकते हैं। यह चारों ओर घूमने के लिए बहुत सारी वस्तुओं है।

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

1

अन्य उत्तरों को प्रतिबिंबित करते हुए, सबसे बड़ी बचत सभी अनावश्यक राज्य डेटा को समाप्त करने से होती है।

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

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

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

1

संबंधित नोट पर, गेम इंजन अक्सर उस सामग्री के आकार को रखने के लिए ज़िप संपीड़न को नियोजित करते हैं और कुछ संचालन को तेज़ी से भी बनाते हैं।

1

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

आप एक खिलाड़ी वर्ग है और आप कहानी में अच्छी तरह से कर रहे हैं कहो, जब आप उस संग्रहित किया जा सकता संभव डेटा सहेजें पर क्लिक करें है:

  • कहाँ खिलाड़ी स्तर/नक्शा में स्थित है
  • उसके गुण क्या हैं: स्वास्थ्य, मन, ताकत, बुद्धि, आदि
  • क्या कौशल वह है।
  • वह किस स्तर पर है।

वैश्विक स्तर पर हम भी हो सकते हैं:

  • कितने संदर्भ (ऐसे नाम हैं जो इंजन सूची में से एक वस्तु लेने के लिए अनुमति देते हैं) वस्तुओं के लिए है कि विशिष्ट स्तर में संग्रहित किया जा रहा है, अन्य में शब्द जब आप लोड करते हैं तो किस वस्तु को लोड किया जाना चाहिए।
  • क्या हम भौतिकी का उपयोग कर रहे हैं, यदि ऐसा है तो इसका उपयोग कौन करता है।

और कई अन्य। Fallout 3 में एक प्रकार का सेव है, एक और गेम में दूसरा होगा। यह वास्तव में उपयोग में शैली और इंजन पर निर्भर करता है।

4

विशेष रूप से Fallout 3 में, मानचित्र को ग्रिड फैशन में बांटा गया है। आप केवल अपने वर्तमान वर्ग और तुरंत तुरंत देख सकते हैं। डेटा स्टोर का प्रकार वास्तव में महत्वपूर्ण नहीं है - एक SQLite डेटाबेस हो सकता है, डिस्क पर क्रमबद्ध एक पेड़ हो सकता है, या पूरी तरह से कुछ और हो सकता है।

... क्या आप खेल में हर वस्तु का एक विशाल सरणी के लिए होता है, और लगातार एक छोटे सूची है कि को दिखाई वस्तुओं प्रस्तुत करना रखती अद्यतन?

आम तौर पर हाँ, लेकिन "विशाल सरणी" को स्मृति में होने की आवश्यकता नहीं है। और यहां कुछ और सूचियों कर रहे हैं - वर्तमान और आसन्न ग्रिड वर्ग में वस्तुओं (आप पीछे से हमला किया जा सकता है - दिखाई देने वाली सूची में शामिल नहीं), दिखाई देने वाली सूची, टाइमर सूची ...

यदि आप अंत में छुआ चाहेंगे क्या होगा खेल में हर वस्तु? क्या आपकी बचत गेम बड़ी और बड़ी हो जाएगी?

क्या - अगर सब कुछ के लिए एक डिफ़ॉल्ट स्थिति तालिका हो, तो बचत में केवल अंतर हो सकते हैं। जब आप प्रगति करेंगे तो बचत तब बढ़ेगी।

जब आप किसी स्थान पर जाते/वापस जाते हैं तो सब कुछ जारी रहता है।

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

संबंधित मुद्दे