ক্রস-প্ল্যাটফর্ম গেমস তৈরির জন্য কোনও টিপস? [বন্ধ]


উত্তর:


44

বিমূর্ত স্তরগুলির পিছনে প্ল্যাটফর্ম-নির্দিষ্ট যে কোনও কিছু লুকান

এর অর্থ রেন্ডারিং, অডিও, ব্যবহারকারী ইনপুট এবং ফাইল আইও এর মতো স্টাফ। রান-টাইম পারফরম্যান্স পেনাল্টিকে প্ররোচিত না করে অ্যাবস্ট্রাক্ট করার একটি সাধারণ কৌশল হল প্ল্যাটফর্ম-নির্দিষ্ট প্রয়োগের ফাইলগুলির সাথে প্ল্যাটফর্ম-অজনস্টিক শিরোনাম:

// 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 হিসাবে লেখুন, তারপরে একটি পাইপলাইন রয়েছে যা সেগুলি স্বয়ংক্রিয়ভাবে আপনার প্রয়োজনীয় বিভিন্ন প্ল্যাটফর্ম-নির্দিষ্ট ফর্ম্যাটে রূপান্তর করতে পারে।

আপনার ডেটাতে একটি নির্দিষ্ট মেমোরি লেআউট বা প্রান্তিকতা অনুমান করবেন না

প্ল্যাটফর্মগুলি বাইট ক্রম, প্যাডিং, প্রান্তিককরণ এবং শব্দের আকারে পৃথক হতে পারে। যে কোনও কোড সে সম্পর্কে যত্নশীল তা অবশ্যই সমস্ত প্ল্যাটফর্মগুলিতে ভালভাবে পরীক্ষা করা উচিত।

সমস্ত প্ল্যাটফর্মে পরীক্ষা, সর্বদা

আপনি প্ল্যাটফর্ম-নির্দিষ্ট বাগ দ্বারা দংশিত হবে । আপনি যখন খেলার বাইরে বেরোনোর ​​চেষ্টা করছেন তখনই কি আপনি বরং এখনই কামড়ে ফেলবেন?


2
#ifdef PLATFORM_WINftw এর অভাব
টেন্পেন

আপনি কখনই এড়াতে পারবেন না। আপনি এটি কমাতে আশা করতে পারেন।
উপুড়হস্ত

8
এটি করার একটি ভাল উপায় হ'ল সমস্ত প্ল্যাটফর্ম নির্দিষ্ট কোডটিকে একই ইন্টারফেসের সাহায্যে একটি সেট শেয়ার্ড লাইব্রেরিতে স্থানান্তরিত করতে পারেন তবে আপনি # ifdef এর প্ল্যাটফর্মের জন্য সঠিক লাইব্রেরি বুটস্ট্র্যাপিংয়ের মধ্যে সীমাবদ্ধ করতে পারবেন।
নীল

1
+1, দুর্দান্ত মন্তব্য। মনে রাখবেন যে এমনকি এসটিএল প্ল্যাটফর্ম-নির্ভর (এবং হ্যাঁ, কিছু ফাংশন বিভিন্ন সংকলকগুলিতে বিভিন্ন জিনিস করে)।
সাইমন

নিশ্চয়ই কোনও অতিরিক্ত ফাংশন কল করা কর্মক্ষমতা হ্রাস পাবে? সিপিইউতে রেজিস্টারগুলি বা আরও খারাপ, মেমরি থেকে ডেটা লোড করতে বা সরাতে হবে যা মেমোরি এখনও ধীর। একটি সিস্টেম কল কি যথেষ্ট হবে না?
দ্য ব্লুকিট

10
  • ওপেনগল / এসডিএলের মতো একটি এপিআই ব্যবহার করুন যা প্ল্যাটফর্ম থেকে প্ল্যাটফর্মে যাওয়ার সময় আপনাকে সর্বনিম্ন ঝামেলা দেয়।

  • আপনি কী প্ল্যাটফর্ম সমর্থন করতে চান তা নিশ্চিত হয়ে নিন। আপনি খালি ভবিষ্যতে বহু প্ল্যাটফর্ম সমর্থন করতে চাইতে পারেন বলে কেবল ওপেনগল ব্যবহার করবেন না। আপনি যেভাবে বলতে চাইছেন শুরু করুন।

  • আপনি যে প্ল্যাটফর্ম সমর্থন করতে চান তার প্রতিটি হার্ডওয়ার সীমাবদ্ধতাগুলি জানুন।


দ্বিতীয় পয়েন্টটি যথেষ্ট চাপ দেওয়া যায় না। নিশ্চিত করুন যে গেমটি কার উদ্দেশ্যে করা হয়েছে তা আপনি জানেন (অর্থাত্ যদি এটি একটি নৈমিত্তিক খেলা হয় তবে আপনি এটি কমপক্ষে ওএসএক্স এবং উইন্ডোজে রাখতে চান, সুতরাং ওপেনএল সেরা বিকল্প হবে)। তৃতীয় পয়েন্ট হিসাবে - এবং এই যেখানে ইঞ্জিন প্লে আসে - এছাড়াও গুরুত্বপূর্ণ। ডিএস গেমটি তৈরি করতে অবাস্তব জাতীয় বৈশিষ্ট্য সমৃদ্ধ, রিসোর্স-ভারী ইঞ্জিন ব্যবহার করা অযৌক্তিক হবে। বিষয়টি দ্বিতীয়টির সাথে আমি কী বলেছিলাম তার সাথেও সম্পর্কিত: গেমটি কার উদ্দেশ্যে করা হয়েছে তা প্রতিষ্ঠা করুন। আপনি যদি একটি নৈমিত্তিক গেমের জন্য যাচ্ছেন তবে বেশিরভাগ মানুষের কম্পিউটারগুলি কণা বলে না handle

7

#if defined(_FOO_) ... #elif defined(_BAR_) ... #else ... #endifসমস্ত কোডে ছড়িয়ে পড়া এড়ানোর চেষ্টা করুন ।

কখনও কখনও দেখে মনে হয় এটি সহজতম পথ, তবে এটি আপনাকে দীর্ঘমেয়াদে ঝামেলা দেয়। আপনার তাদের নিজের ফাইলে সীমাবদ্ধ করার চেষ্টা করা উচিত, যাতে প্রতিটি প্ল্যাটফর্মের প্রয়োগটি স্বয়ংসম্পূর্ণ থাকে।

প্ল্যাটফর্ম যুক্ত করা বেশিরভাগ ক্ষেত্রে নতুন বাস্তবায়ন ফাইল যুক্ত করা উচিত এবং কয়েকটি বিদ্যমান বিদ্যমানগুলি সংশোধন করে।


4

প্রচুর গ্রন্থাগারগুলি সেগুলি ক্রস প্ল্যাটফর্ম; কোথাও দৌড়াতে আপনাকে সরাসরি ওপেনএল-তে লেখার দরকার নেই। ওজিআরই হ'ল একটি রেন্ডারিং ইঞ্জিনের দুর্দান্ত উদাহরণ যা আপনার নামকরণে যত্ন নেওয়া কোনও প্ল্যাটফর্মে কাজ করে।

আমার অভিজ্ঞতায়, সবচেয়ে বড় উদ্বেগ আপনার বিল্ড সিস্টেম। আপনি যদি উইন্ডোজে ভিজ্যুয়াল স্টুডিও সহ বিকাশ করেন তবে আপনার কোডটি লিনাক্সে সংকলন করতে পারে, তবে সহজেই এটি তৈরি করতে আপনার খুব কঠিন সময় আসবে । প্ল্যাটফর্ম-নির্দিষ্ট প্রকল্প ফাইল (লিনাক্সের মেকফাইলস, উইন্ডোজে ভিএস প্রকল্পসমূহ, ম্যাকের এক্সকোড প্রজেক্টস ইত্যাদি) তৈরি করতে একই বিল্ড নির্দেশাবলী ব্যবহার করতে পারে এমন সিএমকেকের মতো বিল্ড সিস্টেমগুলি দেখুন।


4

যখন সংরক্ষণ এবং লোড ফাইল, বা নেটওয়ার্কের মাধ্যমে যোগাযোগ জন্য আপনার ফাংশন লেখা, সম্পর্কে ভুলবেন না endianness

ফ্রিড / ফ্রেইট বা এর মতো নিম্ন স্তরের কোনও একক কল সহ একটি বৃহত কাঠামো পড়ার পরিবর্তে একটি রিডবাইট / রাইটবাইট এবং রিডফ্লোট / রাইটফ্লোট তৈরি করুন। তারপরে আপনি যদি অন্য কোনও প্ল্যাটফর্মকে টার্গেট করার সিদ্ধান্ত নেন তবে আপনার পরিবর্তনের জন্য কম জায়গা থাকবে।


+1 * 9000. আমি অনুমান করি এটি কেবলমাত্র আধুনিক / ব্যবহৃত আর্কিটেকচার (আরআইএসসি) এর ক্ষেত্রে মোবাইল ফোনে প্রযোজ্য হবে; কিন্তু এখনও গুরুত্বপূর্ণ।
জোনাথন ডিকিনসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.