গেমস মধ্যে ছোট এবং বড় শেষ


16

গেমের প্রোগ্রামিংয়ের প্রক্রিয়ায় কী আমাদের বাইট অর্ডার সম্পর্কে চিন্তা করতে হবে? গেম কনসোলগুলি কি বিভিন্ন বাইট অর্ডার ব্যবহার করে?


1
আপনি এখনই বা সাধারণভাবে কাজ করছেন এমন কোনও নির্দিষ্ট প্রকল্প সম্পর্কে উদ্বিগ্ন? বেশিরভাগ ক্ষেত্রে, আপনি যদি কোনও কনসোলের জন্য কোনও গেম লিখছেন, আপনি সম্ভবত এক্সএনএ এবং ইনপুট এবং আউটপুট এর মতো সরঞ্জামগুলির কিছু ভাল নথিযুক্ত সেট ব্যবহার করবেন এটির নথিতে inাকা যাবে।
উলফডন

4
আপনি যদি এই সম্পর্কে উদ্বিগ্ন হন তবে আমি রব পাইকের বাইট অর্ডার ভ্রান্তিটি সুপারিশ করছি - বাইট ক্রমটি সম্পর্কে চিন্তা করার চেষ্টা করা আপনাকে প্রায়শই এটিকে উপেক্ষা করা এবং সত্যিকারের ইন্দিয়ান-ইন্ডিপেন্ডেন্ট কোড লেখার চেয়ে আরও বেশি সমস্যায় ফেলে দেয়।

1
এটি একটি ভাল পঠনযোগ্য, তবে রব দেখিয়ে দিচ্ছেন যে আরও জটিল লেখার প্রয়োজনে আপনি সরলীকৃত পাঠগুলি পেতে পারেন। আপনি যদি লেখক না হন তবে দুর্দান্ত!
কাইলোটন

উত্তর:


14

আপনি যদি নেটওয়ার্কিং কোডটি লিখছেন তবে এটি প্রায়শই এমন একটি জিনিস যা আপনাকে হ্যাঁ করতে হবে।

এছাড়াও এটি সম্ভব যে কোনও ফাইল ফর্ম্যাটে বাইট অর্ডার করা আপনার প্ল্যাটফর্মটি যা ব্যবহার করে তা নয়, তাই কখনও কখনও এটি সেখানে গুরুত্বপূর্ণও হয়।


8

আপনি কি এটি সম্পর্কে চিন্তা করতে হবে? সম্ভবত না। গেম প্রোগ্রামিংয়ের একটি বিস্তৃত অংশ এমন পর্যায়ে যেতে চলেছে যে শেষের দিকটি বিমূর্ত হয়ে যায়। এমনকি নেটওয়ার্কিংয়ে, আপনি প্রায় অবশ্যই নেটওয়ার্কিং প্রোটোকলগুলির জন্য একটি গ্রন্থাগার ব্যবহার করতে যাচ্ছেন। এটি ভাল যে আপনি এটি সম্পর্কে অবগত আছেন তবে আমি সন্দেহ করি যে আপনি এটি নিয়ে কোনও সমস্যা নিয়ে এসেছেন।


5

বেশিরভাগ সময়, না।

এন্ডিয়নেসটি সাধারণত গেম ইঞ্জিনের উচ্চ স্তরের মডিউলগুলিতে বিমূর্ত হয় এবং আপনাকে এটি দৈনিক ভিত্তিতে চিন্তা করতে হবে না। যদি এটি বিমূর্ত না হয়, তবে ইঞ্জিনটির একটি গুরুতর সমস্যা রয়েছে এবং এটি ঠিক করা উচিত, কারণ গেমটি তৈরি করার সময় আপনার এই ধরণের বিবরণটি উদ্বিগ্ন হওয়া উচিত।

তবে আপনি যদি কোনও সি / সি ++ মাল্টি-প্ল্যাটফর্ম ইঞ্জিনের কয়েকটি নিম্ন-স্তরের অংশে কাজ করে থাকেন তবে আপনাকে এটি মোকাবেলা করতে হতে পারে। তিনটি বর্তমান-জেন কনসোলগুলি একটি পাওয়ারপিসি আর্কিটেকচার ব্যবহার করে, এটি বিগ-এন্ডিয়ান, অন্যদিকে পিসিতে ব্যবহৃত x86 আর্কিটেকচারটি স্বল্প-এডিয়ান। সুতরাং আপনি যদি এমন কোনও কোডে কাজ করছেন যা কোথাও থেকে কাঁচা বাইটগুলি ডেটা স্ট্রাকচারে রাখার জন্য (বাইনারি সিরিয়ালাইজেশন, নেটওয়ার্কিং ...) পড়ে থাকে তবে হ্যাঁ আপনাকে এটি মোকাবেলা করতে হবে।

উদাহরণস্বরূপ, সি / সি ++ এ, এই ধরণের বাইট অ্যাকশনে (সাধারণভাবে পরীক্ষা করা হয় না, সংশোধন সংশোধনকে স্বাগত জানানো হয়) দেখতে পাওয়া যায়:

// 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" (উইন্ডোজ, লিনাক্স, ম্যাক) সমস্ত আজকাল ইন্টেল x86 / x64 আর্কিটেকচারে একচেটিয়াভাবে বা সমস্ত কিছু সুনির্দিষ্টভাবে রয়েছে, সুতরাং প্রচ্ছন্নতার উদ্বেগ আর প্রাসঙ্গিক নয়।


আর প্রাসঙ্গিক? আমার অভিজ্ঞতায় (একটি দম্পতি সংস্থার জুড়ে 2-3 গেমস এবং 7 বছর, উভয় এমএমও ... সুতরাং পরিসংখ্যানগতভাবে বৈধের চেয়ে উপস্থাপক) পিএস এবং এক্সবক্সের প্রতিটি বাজার উইন্ডোজ বাজারের দ্বিগুণ আকারের, ম্যাকগুলি একটি ছোট ভগ্নাংশ ছিল উইন্ডোজ এবং লিনাক্স এর চেয়ে লক্ষণীয় ছিল। আপনার গেমটি কেবল কোনও কনসোলে কাজ করতে না পারলে আপনি আপনার লাভের 80% পিসিগুলিতে আটকে রেখে মাটিতে ফেলে রাখছেন। ক্রস-এন্ডিয়ান কোডটি এর অর্থ হ'ল আপনার সার্ভারগুলি আপনার ক্লায়েন্টের তুলনায় সম্পূর্ণ আলাদা মেশিনে থাকতে পারে (উদা: প্রতিটি ক্লায়েন্ট-সার্ভার কনসোল গেমটি)।
মার্ক স্টোর

@ মার্কস্টোরার - আমার মনে হয় আমি আসলে যা লিখেছি তা আপনাকে পুনরায় পড়তে হবে।
ম্যাক্সিমাস মিনিমাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.