গেমের প্রোগ্রামিংয়ের প্রক্রিয়ায় কী আমাদের বাইট অর্ডার সম্পর্কে চিন্তা করতে হবে? গেম কনসোলগুলি কি বিভিন্ন বাইট অর্ডার ব্যবহার করে?
গেমের প্রোগ্রামিংয়ের প্রক্রিয়ায় কী আমাদের বাইট অর্ডার সম্পর্কে চিন্তা করতে হবে? গেম কনসোলগুলি কি বিভিন্ন বাইট অর্ডার ব্যবহার করে?
উত্তর:
আপনি কি এটি সম্পর্কে চিন্তা করতে হবে? সম্ভবত না। গেম প্রোগ্রামিংয়ের একটি বিস্তৃত অংশ এমন পর্যায়ে যেতে চলেছে যে শেষের দিকটি বিমূর্ত হয়ে যায়। এমনকি নেটওয়ার্কিংয়ে, আপনি প্রায় অবশ্যই নেটওয়ার্কিং প্রোটোকলগুলির জন্য একটি গ্রন্থাগার ব্যবহার করতে যাচ্ছেন। এটি ভাল যে আপনি এটি সম্পর্কে অবগত আছেন তবে আমি সন্দেহ করি যে আপনি এটি নিয়ে কোনও সমস্যা নিয়ে এসেছেন।
বেশিরভাগ সময়, না।
এন্ডিয়নেসটি সাধারণত গেম ইঞ্জিনের উচ্চ স্তরের মডিউলগুলিতে বিমূর্ত হয় এবং আপনাকে এটি দৈনিক ভিত্তিতে চিন্তা করতে হবে না। যদি এটি বিমূর্ত না হয়, তবে ইঞ্জিনটির একটি গুরুতর সমস্যা রয়েছে এবং এটি ঠিক করা উচিত, কারণ গেমটি তৈরি করার সময় আপনার এই ধরণের বিবরণটি উদ্বিগ্ন হওয়া উচিত।
তবে আপনি যদি কোনও সি / সি ++ মাল্টি-প্ল্যাটফর্ম ইঞ্জিনের কয়েকটি নিম্ন-স্তরের অংশে কাজ করে থাকেন তবে আপনাকে এটি মোকাবেলা করতে হতে পারে। তিনটি বর্তমান-জেন কনসোলগুলি একটি পাওয়ারপিসি আর্কিটেকচার ব্যবহার করে, এটি বিগ-এন্ডিয়ান, অন্যদিকে পিসিতে ব্যবহৃত 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
}
আবার, নিম্ন-স্তরের কোডে এটি ঠিক আছে, তবে এটি সর্বত্র ব্যবহৃত হওয়া উচিত নয়।
এটি আপনি যে প্ল্যাটফর্মগুলিকে লক্ষ্য করছেন তার উপর নির্ভর করে। উদাহরণস্বরূপ, আমি বিশ্বাস করি যে PS3 বড় আকারের তাই এটি যদি আপনার লক্ষ্যগুলির মধ্যে একটি হয় তবে হ্যাঁ, এটি সম্পর্কে আপনার সচেতন হওয়া দরকার।
বাড়ির কম্পিউটার স্পেসে "বিগ 3" (উইন্ডোজ, লিনাক্স, ম্যাক) সমস্ত আজকাল ইন্টেল x86 / x64 আর্কিটেকচারে একচেটিয়াভাবে বা সমস্ত কিছু সুনির্দিষ্টভাবে রয়েছে, সুতরাং প্রচ্ছন্নতার উদ্বেগ আর প্রাসঙ্গিক নয়।