প্রশ্ন
যখন আপনার কাছে একটি 2 ডি গেম থাকে যা সত্যিই বড় চিত্রগুলি ব্যবহার করে (আপনার হার্ডওয়্যার এর চেয়ে বড় সমর্থন করতে পারে) আপনি কী করবেন? সম্ভবত এই সমস্যার কিছু আকর্ষণীয় সমাধান আছে যা আমার আগে কখনও ঘটেনি।
আমি মূলত এক ধরণের গ্রাফিক অ্যাডভেঞ্চার গেম প্রস্তুতকারকের উপর কাজ করছি। আমার টার্গেট শ্রোতা এমন লোক যাঁর খুব কম গেম ডেভলপমেন্ট (এবং প্রোগ্রামিং) এর অভিজ্ঞতা নেই। আপনি যদি এই জাতীয় অ্যাপ্লিকেশন নিয়ে কাজ করছেন, আপনি কি "আপনার চিত্রগুলি ভাগ করুন" বলার পরিবর্তে অভ্যন্তরীণভাবে সমস্যাটি পরিচালনা করা পছন্দ করবেন না?
প্রসঙ্গ
এটি সুপরিচিত যে গ্রাফিক কার্ডগুলি তারা যে টেক্সচার ব্যবহার করতে পারে তার আকারের উপর কিছুটা বিধিনিষেধ আরোপ করে। উদাহরণস্বরূপ, এক্সএনএর সাথে কাজ করার সময় আপনি কোন প্রোফাইলটি বেছে নেবেন তার উপর নির্ভর করে আপনি সর্বাধিক টেক্সচার আকার 2048 বা 4096 পিক্সেলের মধ্যে সীমাবদ্ধ।
সাধারণত এটি 2 ডি গেমগুলিতে খুব বেশি সমস্যা তৈরি করে না কারণ তাদের বেশিরভাগেরই স্তরগুলি ছোট ছোট পৃথক টুকরা (যেমন টাইলস বা রূপান্তরিত স্প্রাইটস) থেকে তৈরি করা যায় have
তবে কয়েকটি ক্লাসিক পয়েন্ট'অন ক্লিক গ্রাফিক অ্যাডভেঞ্চার গেমগুলি (উদাঃ বানকি দ্বীপ) সম্পর্কে ভাবেন। গ্রাফিক অ্যাডভেঞ্চার গেমের ঘরগুলি সাধারণত কোনও পুরোপুরি ডিজাইন করা হয়, যেমন কোনও চিত্রকর যেমন কোনও প্রাকৃতিক দৃশ্যে কাজ করে little বা সম্ভবত ফাইনাল ফ্যান্টাসি 7 এর মতো একটি গেম যা বড় প্রাক-রেন্ডারযুক্ত ব্যাকগ্রাউন্ড ব্যবহার করে।
এর মধ্যে কয়েকটি কক্ষটি বেশ বড় আকারের, প্রায়শই তিন বা ততোধিক প্রস্থের প্রস্থের প্রসারিত হয়ে উঠতে পারে। এখন আমরা যদি আধুনিক হাই ডেফিনিশন গেমের প্রসঙ্গে এই ব্যাকগ্রাউন্ডগুলি বিবেচনা করি তবে এগুলি সহজেই সর্বাধিক সমর্থিত টেক্সচারের আকার ছাড়িয়ে যাবে।
এখন, এর সুস্পষ্ট সমাধান হ'ল ব্যাকগ্রাউন্ডটি ছোট ছোট বিভাগগুলিতে বিভক্ত করা যা প্রয়োজনীয়তার মধ্যে ফিট করে এবং পাশাপাশি পাশাপাশি আঁকুন। তবে আপনার (বা আপনার শিল্পী) আপনার সমস্ত জমিনকে আলাদা করে নেওয়া উচিত?
আপনি যদি একটি উচ্চ স্তরের এপিআই নিয়ে কাজ করছেন, তবে সম্ভবত এই পরিস্থিতিটি মোকাবেলা করার জন্য এবং অভ্যন্তরীণভাবে টেক্সচারগুলি বিভাজন এবং সমাবেশ করার জন্য প্রস্তুত হওয়া উচিত নয় (হয় এক্সএনএ এর সামগ্রী পাইপলাইনের মতো প্রাক প্রক্রিয়া হিসাবে বা রানটাইমের সময়)?
সম্পাদন করা
এক্সএনএ বাস্তবায়ন দৃষ্টিকোণ থেকে আমি যা ভাবছিলাম তা এখানে।
আমার 2 ডি ইঞ্জিনে কেবল টেক্সচার 2 ডি এর কার্যকারিতাটির খুব সামান্য উপসেট প্রয়োজন। আমি আসলে এই ইন্টারফেসে এটি হ্রাস করতে পারি:
public interface ITexture
{
int Height { get; }
int Width { get; }
void Draw(SpriteBatch spriteBatch, Vector2 position, Rectangle? source, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth);
}
আমি টেক্সচার 2 ডি এর উপর নির্ভর করে কেবলমাত্র বাহ্যিক পদ্ধতিটি হ'ল স্প্রাইটব্যাচ ra ড্র () যাতে আমি একটি এক্সটেনশন পদ্ধতি যুক্ত করে তাদের মধ্যে একটি সেতু তৈরি করতে পারি:
public static void Draw(this SpriteBatch spriteBatch, ITexture texture, Vector2 position, Rectangle? sourceRectangle, Color color, float rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, float layerDepth)
{
texture.Draw(spriteBatch, position, sourceRectangle, color, rotation, origin, scale, effects, layerDepth);
}
এটি যখনই আমি আগে কোনও টেক্সচার 2 ডি ব্যবহার করতাম তখন এটি আমাকে আইটেকচারটি ইন্টারচেঞ্জযোগ্যভাবে ব্যবহার করতে দেয় to
তারপরে আমি আইটেমচারের দুটি পৃথক বাস্তবায়ন তৈরি করতে পারি যেমন রেগুলার টেকচার এবং লার্জ টেক্সচার, যেখানে রেগুলার টেক্সচারটি কেবল একটি নিয়মিত টেক্সচার 2 ডি মোড়ান।
অন্যদিকে, লার্জ টেক্সচার সম্পূর্ণ ইমেজের বিভক্ত টুকরোগুলির একটিতে টেক্সচার 2 ডি এর একটি তালিকা রাখবে। সর্বাধিক গুরুত্বপূর্ণ অংশটি হ'ল লার্জ টেকচারে ড্র () কল করা সমস্ত রূপান্তর প্রয়োগ করতে এবং সমস্ত টুকরো আঁকতে সক্ষম হবে যেন তারা কেবল একটি সংঘবদ্ধ চিত্র।
পরিশেষে, পুরো প্রক্রিয়াটিকে স্বচ্ছ করতে, আমি একটি ইউনিফাইড টেক্সচার লোডার শ্রেণি তৈরি করব যা কারখানার পদ্ধতি হিসাবে কাজ করবে। এটি প্যারামিটার হিসাবে টেক্সচারের পথ গ্রহণ করবে এবং এমন একটি আইটেমচার ফিরিয়ে দেবে যা সীমা ছাড়িয়ে যাবে বা না ইমেজের আকারের উপর নির্ভর করে একটি নিয়মিত টেক্সচার বা লার্জ টেক্সচার হবে। তবে এটি কোনটি তা ব্যবহারকারীর জানা দরকার ছিল না।
কিছুটা ওভারকিল নাকি ঠিক শোনাচ্ছে?