অ্যাপটি 1.5Gb এ পৌঁছে ক্র্যাশ হয়ে যায়।
এটি দৃ strongly়ভাবে প্রস্তাব দেয় যে আপনি আপনার টাইলগুলি সঠিকভাবে উপস্থাপন করছেন না, কারণ এর অর্থ প্রতিটি টাইলের আকার ~ 80 বাইট।
আপনার যা বোঝার দরকার তা হ'ল একটি টাইলের গেমপ্লে ধারণা এবং ব্যবহারকারী যে ভিজ্যুয়াল টাইলটি দেখেন তার মধ্যে আলাদা হওয়া দরকার । এই দুটি ধারণা একই জিনিস নয় ।
উদাহরণস্বরূপ টেরারিয়া নিন। সবচেয়ে ছোট টেরারিয়া বিশ্বে 4200x1200 টাইল লাগে যা 5 মিলিয়ন টাইলস। এখন, এই পৃথিবীর প্রতিনিধিত্ব করতে কত স্মৃতি লাগে ?
ঠিক আছে, প্রতিটি টাইলের একটি অগ্রভূমি স্তর, একটি পটভূমি স্তর (পটভূমির দেয়াল), তারের যায় যেখানে একটি "তারের স্তর" এবং আসবাবপত্র আইটেমগুলি যেখানে একটি "আসবাবপত্র স্তর" থাকে। প্রতিটি টাইল কত স্মৃতি গ্রহণ করে? আবার, আমরা কেবল ধারণামূলকভাবে কথা বলছি, দৃষ্টিভঙ্গিতে নয়।
একটি অগ্রভাগ টাইল সহজেই স্বাক্ষরবিহীন শর্টে সংরক্ষণ করা যেতে পারে। Ground৫৫3636 টিরও বেশি ফোরগ্রাউন্ড টাইল প্রকার নেই, সুতরাং এর চেয়ে বেশি মেমরি ব্যবহার করার কোনও মানে নেই। ব্যাকগ্রাউন্ড টাইলগুলি সহজেই স্বাক্ষরবিহীন বাইটে থাকতে পারে কারণ বিভিন্ন ধরণের পটভূমির 256 টিরও কম রয়েছে। তারের স্তরটি নিখুঁতভাবে বাইনারি হয়: হয় কোনও টাইলের তারে তার থাকে বা এটি থাকে না। সুতরাং টাইল প্রতি এক বিট। এবং সেখানে আসবাবপত্রের কতগুলি পৃথক টুকরো সম্ভব রয়েছে তার উপর নির্ভর করে আসবাবের স্তরটি আবার স্বাক্ষরবিহীন বাইট হতে পারে।
টাইল প্রতি মোট মেমরির আকার: 2 বাইট + 1 বাইট + 1 বিট + 1 বাইট: 4 বাইট + 1 বিট। সুতরাং, ছোট টেরারিয়া মানচিত্রের মোট আকার 20790000 বাইট বা M 20MB। (দ্রষ্টব্য: এই গণনাগুলি টেরারিয়া ১.১ এর উপর ভিত্তি করে then গেমটি তখন থেকে অনেক প্রসারিত হয়েছে, তবে আধুনিক টেরারিয়া প্রতি টাইলের অবস্থানের প্রতি 8 বাইট বা 40MB ডলারের মধ্যেও ফিট হতে পারে Still এখনও বেশ সহনীয়)।
আপনার এই উপস্থাপনাটি কখনই সি # শ্রেণির অ্যারে হিসাবে সঞ্চয় করা উচিত নয় । তাদের পূর্ণসংখ্যার অ্যারে বা অনুরূপ কিছু হওয়া উচিত। এসি # স্ট্রাক পাশাপাশি কাজ করবে।
এখন, যখন কোনও মানচিত্রের অংশটি আঁকানোর সময় আসে (জোরটি নোট করুন), টেরারিয়াকে এই ধারণাগত টাইলগুলিতে রূপান্তর করতে হবে প্রকৃত টাইলগুলিতে । প্রতিটি টাইলের প্রকৃতপক্ষে একটি অগ্রভাগ চিত্র, পটভূমি চিত্র, একটি alচ্ছিক আসবাবের চিত্র এবং তারের চিত্র থাকা দরকার। এখানেই এক্সএনএ তার বিভিন্ন স্প্রিট শিট এবং এর সাথে আসে।
আপনাকে যা করতে হবে তা হ'ল আপনার ধারণাগত মানচিত্রের দৃশ্যমান অংশটিকে আসল এক্সএনএ স্প্রাইট শীট টাইলগুলিতে রূপান্তর করা। আপনার একবারে পুরো জিনিসটি রূপান্তর করার চেষ্টা করা উচিত নয় । আপনি যে প্রতিটি টাইল সঞ্চয় করেন তা কেবল একটি সূচক হিসাবে বলা উচিত যে "আমি টাইল টাইপ এক্স," যেখানে এক্স একটি পূর্ণসংখ্যা। আপনি কোন স্প্রিটটি আনতে সেই পূর্ণসংখ্যার সূচকটি ব্যবহার করেন আপনি এটা প্রদর্শন করে ব্যবহার করুন। এবং আপনি পৃথক কোয়াড আঁকার চেয়ে দ্রুত এটিকে তৈরি করতে এক্সএনএর স্প্রিট শিটগুলি ব্যবহার করেন।
এখন টাইলগুলির দৃশ্যমান অঞ্চলটি বিভিন্ন খণ্ডে বিভক্ত হওয়া দরকার, যাতে আপনি যখনই ক্যামেরা চালিত করেন তখন আপনি নিয়মিত স্প্রিট শিট তৈরি না করে। সুতরাং আপনার কাছে স্প্রাইট শিট হিসাবে বিশ্বের x৪xx৪ টি অংশ থাকতে পারে। প্লেয়ারের বর্তমান ক্যামেরার অবস্থান থেকে বিশ্বের যে কোনও 64৪x64৪ টি অংশ দৃশ্যমান হ'ল আপনার আঁকা খণ্ডগুলি। অন্য কোনও অংশে এমনকি স্প্রাইট শিট নেই; যদি কোনও অংশ স্ক্রিন থেকে পড়ে যায়, আপনি সেই শীটটি বাইরে ফেলে দিন (দ্রষ্টব্য: আপনি এটি সত্যই মুছবেন না; আপনি এটি এপাশে রাখেন এবং এটি একটি নতুন অংশের জন্য সম্মানিত করেন যা পরে দৃশ্যমান হতে পারে)।
আমি পুরো মানচিত্রটি কমপক্ষে সার্ভার অ্যাপে (এবং সম্ভব হলে ক্লায়েন্টে) প্রসেস করতে চাই।
আপনার সার্ভারটি টাইলসের ভিজ্যুয়াল উপস্থাপনা সম্পর্কে জানতে বা যত্নের প্রয়োজন নেই। এগুলির জন্য কেবল যত্নশীল হওয়া দরকার is ব্যবহারকারী এখানে একটি টাইল যুক্ত করেন, সুতরাং এটি সেই টাইল সূচকে পরিবর্তন করে।