खेलों में थोड़ा और बड़ा धीरज


16

क्या हमें किसी गेम की प्रोग्रामिंग की प्रक्रिया में बाइट के आदेशों के बारे में चिंता करनी है? क्या गेम कंसोल अलग-अलग बाइट ऑर्डर का उपयोग करते हैं?


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

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

1
यह एक अच्छा पढ़ा है, लेकिन रोब दिखा रहा है कि आप अधिक जटिल लिखने की आवश्यकता की कीमत पर सरलीकृत पढ़ सकते हैं। यदि आप एक लेखन नहीं कर रहे हैं, महान!
काइलोटन

जवाबों:


14

यदि आप नेटवर्किंग कोड लिख रहे हैं, तो यह अक्सर ऐसा कुछ होता है जिससे आपको निपटना पड़ता है, हाँ।

यह भी संभव है कि फ़ाइल फॉर्मेट में बाइट ऑर्डर करना आपके प्लेटफ़ॉर्म का उपयोग नहीं करता है, इसलिए कभी-कभी यह वहां भी मायने रखता है।


8

क्या आपको इसकी चिंता करनी है? शायद नहीं। गेम प्रोग्रामिंग का एक विशाल स्तर इस स्तर पर होने वाला है कि अंत्येष्टि दूर हो जाती है। नेटवर्किंग में भी, आप लगभग निश्चित रूप से नेटवर्किंग प्रोटोकॉल के लिए एक पुस्तकालय का उपयोग करने जा रहे हैं। यह अच्छा है कि आप इसके बारे में जानते हैं, लेकिन मुझे संदेह है कि आप इसके साथ एक समस्या में भाग लेंगे।


5

अधिकांश समय, नहीं।

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

हालाँकि यदि आप C / C ++ मल्टी-प्लेटफ़ॉर्म इंजन के कुछ निम्न-स्तरीय भागों पर काम कर रहे हैं, तो आपको इससे निपटना पड़ सकता है।सभी तीन वर्तमान-जीन कंसोल एक पावरपीसी आर्किटेक्चर का उपयोग करते हैं, जो बड़े-एंडियन हैं, जबकि पीसी पर उपयोग किए जाने वाले x86 आर्किटेक्चर थोड़ा-एंडियन हैं। इसलिए यदि आप कुछ ऐसे कोड पर काम कर रहे हैं जो कच्चे बाइट्स को डेटा संरचनाओं (बाइनरी सीरियललाइज़ेशन, नेटवर्किंग ...) में डालने के लिए कहीं से पढ़ते हैं, तो हाँ आपको इससे निपटना होगा।

उदाहरण के लिए, C / C ++ में, इस तरह की बाइट स्वैपिंग को कार्रवाई में देखना आम है (परीक्षण नहीं, सुधार का स्वागत करते हुए):

// Assume bytes comes ordered as big-endian
u16 u16FromBytes(void* data)
{
#if BIG_ENDIAN
    return (u16(data[0]) << 8) + u16(data[1]);
#else // LITTLE_ENDIAN
    return (u16(data[1]) << 8) + u16(data[0]);
#endif
}

एक बार फिर, यह निम्न-स्तर के कोड में ठीक है, लेकिन इसका उपयोग हर जगह नहीं किया जाना चाहिए।


3

यह उन प्लेटफार्मों पर निर्भर करता है जिन्हें आप लक्षित कर रहे हैं। उदाहरण के लिए, मेरा मानना ​​है कि PS3 बड़ा-एंडियन है इसलिए यदि यह आपके किसी लक्ष्य में से एक है तो यह कुछ ऐसा है जिसके बारे में आपको अवगत होना चाहिए, हाँ।

होम कंप्यूटर स्पेस में "बिग 3" (विंडोज़, लिनक्स, मैक) इन दिनों इंटेल एक्स 86 / एक्स 64 आर्किटेक्चर पर सभी विशेष रूप से या सभी लेकिन विशेष रूप से हैं, इसलिए एंडियननेस चिंताएं अब प्रासंगिक नहीं हैं।


अब प्रासंगिक नहीं है? मेरे अनुभव में (एक युगल कंपनियों और 2-3 वर्षों में दोनों खेल, दोनों MMOs ... इसलिए सांख्यिकीय रूप से मान्य होने के बजाय ऐसा है) पीएस और एक्सबॉक्स बाजारों में से प्रत्येक विंडोज़ मार्केट के आकार के दोगुने हैं, मैक एक छोटा सा अंश थे विंडोज़ और लिनक्स की तुलना में यह काफी छोटा था। जब तक आपका गेम केवल कंसोल पर काम नहीं कर सकता, आप पीसी पर चिपके हुए अपने लाभ का 80% जमीन पर छोड़ रहे हैं। क्रॉस-एंडियन कोड का मतलब यह भी है कि आपके सर्वर आपके ग्राहकों की तुलना में पूरी तरह से अलग मशीनों पर हो सकते हैं (उदा: हर क्लाइंट-सर्वर कंसोल गेम कभी भी)।
मार्क स्टॉपर

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