एक कस्टम गेम इंजन के लिए, मुझे क्या करना चाहिए अगर मेरा मुख्य डेटा विकृत या गायब है?


27

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

मेरे डेटा का अधिकांश हिस्सा बाहरी फ़ाइलों से आता है, और मैं केवल संपत्ति का संदर्भ नहीं देता हूं; मैं अपने सभी गेम ऑब्जेक्ट को .JSON के माध्यम से परिभाषित करता हूं। लेकिन, अफसोस, मैं इंसान हूं; कभी-कभी मेरी डेटा फ़ाइलें अमान्य होती हैं, या मैं प्रारूप बदल देता हूं, लेकिन फ़ाइल को अपडेट करना भूल जाता हूं, या लोडर स्वयं फ्लैट-आउट छोटी गाड़ी है।

यदि, किसी भी कारण से, किसी कस्टम इंजन में किसी प्रकार की संपत्ति को लोड करने का प्रयास विफल हो जाता है, तो मेरे पास क्या विकल्प हैं?

यह डुप्लिकेट नहीं है कि मुझे लापता संसाधनों को कैसे संभालना चाहिए? , जैसा कि प्रश्न उपयोगकर्ता-सामना करने वाली संपत्ति जैसे मॉडल या बनावट के बारे में है। खराब टेक्स्ट को एक बिसात से बदला जा सकता है, ख़ामोशी के साथ ख़राब आवाज़ और "ERROR" के साथ ख़राब टेक्स्ट को। मेरी समस्या डेटा के साथ है जो खेल के लिए महत्वपूर्ण है यहां तक ​​कि चल रहा है, जैसे कि स्तर, गेम ऑब्जेक्ट परिभाषा और जीयूआई लेआउट।


7
मैं अपने खेल के लिए एक समान दृष्टिकोण का उपयोग करता हूं। मैंने वास्तव में मानव-त्रुटि से बचने के लिए अपने गेम डेटा फ़ाइलों को उत्पन्न करने के लिए एक छोटी उपयोगिता ऐप का निर्माण किया - इस तरह से मैं बस फाइलों को संशोधित कर सकता हूं यदि मैं मैन्युअल रूप से JSON की 100,000 लाइनें लिखने के लिए बदलाव करना चाहता हूं।
JDSweetBeat

आप इसे लोड करने से पहले अपना डेटा किसी सत्यापनकर्ता के माध्यम से भी चला सकते हैं ।
JDSweetBeat

मेरा JSON इतना छोटा है कि स्वचालित रूप से इसे उत्पन्न करना बेकार होगा। इसके अलावा, एक सत्यापनकर्ता मदद नहीं करेगा यदि JSON गायब है, या उस चीज़ में एक बग है जो इसे पढ़ना चाहिए। विचार के लिए धन्यवाद, यद्यपि।
जेसीटीजी

जवाबों:


44

एक त्रुटि लॉग और इनायत से बाहर निकलें।

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


12

बाइट 56 ने एक विकल्प का उल्लेख किया। कम से कम एक अन्य है:

डिफ़ॉल्ट मान लें और एक चेतावनी प्रदर्शित करें।

आपके डेटा की प्रकृति के आधार पर, यह कुछ डिफ़ॉल्ट मानों को मानने के लिए पूरी तरह से स्वीकार्य हो सकता है और उपयोगकर्ता को चेतावनी देता है कि "चूंकि फ़ाइल xxx लोड करने में विफल रही, हम एक सामान्य yyy ऑब्जेक्ट का उपयोग कर रहे हैं।"


6

यह इस बात पर निर्भर करता है कि विकास या रिलीज के दौरान ऐसा होता है या नहीं।

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

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

दूसरी ओर, एक रिलीज में, परिसंपत्ति फ़ाइलों का पूरा सेट आदर्श रूप से होना चाहिए [1] जो आपके स्वचालित परिसंपत्ति पाइपलाइन से गुजरे हैं। यह एक साधारण पार्सर से अधिक नहीं होना चाहिए जो आपके सभी JSONs में पढ़ता है और फिर क्रॉस-चेक करता है कि हर मॉड्यूल अपने आप में सुसंगत है, और पुष्टि करता है कि आपके द्वारा संदर्भित हर संपत्ति वास्तव में है, और फिर फ़ाइलों का पूरा गुच्छा ज़िप करता है कुछ ज्ञात (लेकिन जरूरी नहीं मानक) तरीके से जो आपके इंजन को पढ़ने के लिए आसान है, वैकल्पिक रूप से कुछ चेकसम को जोड़कर।

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

वैकल्पिक रूप से, आप इंटरनेट से संपत्ति की एक प्राचीन प्रति डाउनलोड करने का विकल्प दे सकते हैं (यदि आपके पास डाउनलोड सर्वर है)। लेकिन ग्राहक सहायता दुःस्वप्न से बचने के लिए, गीगाबाइट डेटा डाउनलोड करने से पहले पूछना सुनिश्चित करें ।


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

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