সি / সি ++ এ ক্রস-প্ল্যাটফর্ম গেম তৈরি করার সময় আপনার কাছে কোনও পরামর্শ / প্রস্তাবনা রয়েছে?
সি / সি ++ এ ক্রস-প্ল্যাটফর্ম গেম তৈরি করার সময় আপনার কাছে কোনও পরামর্শ / প্রস্তাবনা রয়েছে?
উত্তর:
বিমূর্ত স্তরগুলির পিছনে প্ল্যাটফর্ম-নির্দিষ্ট যে কোনও কিছু লুকান
এর অর্থ রেন্ডারিং, অডিও, ব্যবহারকারী ইনপুট এবং ফাইল আইও এর মতো স্টাফ। রান-টাইম পারফরম্যান্স পেনাল্টিকে প্ররোচিত না করে অ্যাবস্ট্রাক্ট করার একটি সাধারণ কৌশল হল প্ল্যাটফর্ম-নির্দিষ্ট প্রয়োগের ফাইলগুলির সাথে প্ল্যাটফর্ম-অজনস্টিক শিরোনাম:
// FileSystem.h
class FileSystem {
public:
FileHandle OpenFile(const char * path);
// other stuff...
}
// FileSystemWindows.cpp
FileHandle FileSystem::OpenFile(const char * path) {
// call windows API...
}
তারপরে যথাযথ .cpp ফাইলের বিপরীতে প্রতিটি প্ল্যাটফর্মের জন্য বিল্ডগুলি কনফিগার করুন।
আপনার সামগ্রীর পাইপলাইনগুলি প্রতিটি প্ল্যাটফর্মের জন্য প্ল্যাটফর্ম-স্বতন্ত্র সম্পদ এবং আউটপুট প্ল্যাটফর্ম-নির্দিষ্ট সামগ্রীগুলিতে পড়ুন
উদাহরণস্বরূপ, আপনার টেক্সচারগুলি .tga বা জাস্ট .psd হিসাবে লেখুন, তারপরে একটি পাইপলাইন রয়েছে যা সেগুলি স্বয়ংক্রিয়ভাবে আপনার প্রয়োজনীয় বিভিন্ন প্ল্যাটফর্ম-নির্দিষ্ট ফর্ম্যাটে রূপান্তর করতে পারে।
আপনার ডেটাতে একটি নির্দিষ্ট মেমোরি লেআউট বা প্রান্তিকতা অনুমান করবেন না
প্ল্যাটফর্মগুলি বাইট ক্রম, প্যাডিং, প্রান্তিককরণ এবং শব্দের আকারে পৃথক হতে পারে। যে কোনও কোড সে সম্পর্কে যত্নশীল তা অবশ্যই সমস্ত প্ল্যাটফর্মগুলিতে ভালভাবে পরীক্ষা করা উচিত।
সমস্ত প্ল্যাটফর্মে পরীক্ষা, সর্বদা
আপনি প্ল্যাটফর্ম-নির্দিষ্ট বাগ দ্বারা দংশিত হবে । আপনি যখন খেলার বাইরে বেরোনোর চেষ্টা করছেন তখনই কি আপনি বরং এখনই কামড়ে ফেলবেন?
ওপেনগল / এসডিএলের মতো একটি এপিআই ব্যবহার করুন যা প্ল্যাটফর্ম থেকে প্ল্যাটফর্মে যাওয়ার সময় আপনাকে সর্বনিম্ন ঝামেলা দেয়।
আপনি কী প্ল্যাটফর্ম সমর্থন করতে চান তা নিশ্চিত হয়ে নিন। আপনি খালি ভবিষ্যতে বহু প্ল্যাটফর্ম সমর্থন করতে চাইতে পারেন বলে কেবল ওপেনগল ব্যবহার করবেন না। আপনি যেভাবে বলতে চাইছেন শুরু করুন।
আপনি যে প্ল্যাটফর্ম সমর্থন করতে চান তার প্রতিটি হার্ডওয়ার সীমাবদ্ধতাগুলি জানুন।
#if defined(_FOO_) ... #elif defined(_BAR_) ... #else ... #endif
সমস্ত কোডে ছড়িয়ে পড়া এড়ানোর চেষ্টা করুন ।
কখনও কখনও দেখে মনে হয় এটি সহজতম পথ, তবে এটি আপনাকে দীর্ঘমেয়াদে ঝামেলা দেয়। আপনার তাদের নিজের ফাইলে সীমাবদ্ধ করার চেষ্টা করা উচিত, যাতে প্রতিটি প্ল্যাটফর্মের প্রয়োগটি স্বয়ংসম্পূর্ণ থাকে।
প্ল্যাটফর্ম যুক্ত করা বেশিরভাগ ক্ষেত্রে নতুন বাস্তবায়ন ফাইল যুক্ত করা উচিত এবং কয়েকটি বিদ্যমান বিদ্যমানগুলি সংশোধন করে।
প্রচুর গ্রন্থাগারগুলি সেগুলি ক্রস প্ল্যাটফর্ম; কোথাও দৌড়াতে আপনাকে সরাসরি ওপেনএল-তে লেখার দরকার নেই। ওজিআরই হ'ল একটি রেন্ডারিং ইঞ্জিনের দুর্দান্ত উদাহরণ যা আপনার নামকরণে যত্ন নেওয়া কোনও প্ল্যাটফর্মে কাজ করে।
আমার অভিজ্ঞতায়, সবচেয়ে বড় উদ্বেগ আপনার বিল্ড সিস্টেম। আপনি যদি উইন্ডোজে ভিজ্যুয়াল স্টুডিও সহ বিকাশ করেন তবে আপনার কোডটি লিনাক্সে সংকলন করতে পারে, তবে সহজেই এটি তৈরি করতে আপনার খুব কঠিন সময় আসবে । প্ল্যাটফর্ম-নির্দিষ্ট প্রকল্প ফাইল (লিনাক্সের মেকফাইলস, উইন্ডোজে ভিএস প্রকল্পসমূহ, ম্যাকের এক্সকোড প্রজেক্টস ইত্যাদি) তৈরি করতে একই বিল্ড নির্দেশাবলী ব্যবহার করতে পারে এমন সিএমকেকের মতো বিল্ড সিস্টেমগুলি দেখুন।
যখন সংরক্ষণ এবং লোড ফাইল, বা নেটওয়ার্কের মাধ্যমে যোগাযোগ জন্য আপনার ফাংশন লেখা, সম্পর্কে ভুলবেন না endianness ।
ফ্রিড / ফ্রেইট বা এর মতো নিম্ন স্তরের কোনও একক কল সহ একটি বৃহত কাঠামো পড়ার পরিবর্তে একটি রিডবাইট / রাইটবাইট এবং রিডফ্লোট / রাইটফ্লোট তৈরি করুন। তারপরে আপনি যদি অন্য কোনও প্ল্যাটফর্মকে টার্গেট করার সিদ্ধান্ত নেন তবে আপনার পরিবর্তনের জন্য কম জায়গা থাকবে।
#ifdef PLATFORM_WIN
ftw এর অভাব