উদাহরণস্বরূপ, গভীর উত্তরাধিকারের স্তরক্রম সহ গেমওজেক্ট বেস ক্লাস রাখা রক্ষণাবেক্ষণের জন্য ভাল হতে পারে ...
প্রকৃতপক্ষে, গভীর অস্তিত্বগুলি অগভীর চেয়ে রক্ষণাবেক্ষণের জন্য সাধারণত খারাপ এবং গেম অবজেক্টগুলির জন্য আধুনিক স্থাপত্য শৈলীর অগভীরতা, সমষ্টি ভিত্তিক পদ্ধতির দিকে ঝোঁক ।
তবে আমি মনে করি এই পদ্ধতিটি পারফরম্যান্সের সমস্যা তৈরি করতে পারে। অন্যদিকে সমস্ত গেমের সামগ্রীর ডেটা এবং ফাংশনগুলি বিশ্বব্যাপী হতে পারে। যা রক্ষণাবেক্ষণের মাথাব্যথা হতে পারে তবে সর্বোত্তমভাবে সম্পাদন করা গেম লুপের কাছাকাছি হতে পারে।
আপনি যে লুপটি দেখিয়েছেন তাতে পারফরম্যান্স সমস্যা রয়েছে, তবে আপনার পরবর্তী বিবৃতি দ্বারা বোঝানো হয়নি, কারণ আপনার GameObject
ক্লাসে উদাহরণস্বরূপ ডেটা এবং সদস্য ফাংশন রয়েছে । বরং সমস্যাটি হ'ল আপনি যদি গেমের প্রতিটি বস্তুকে ঠিক একইরকম আচরণ করেন তবে আপনি সম্ভবত সেই জিনিসগুলিকে বুদ্ধিদীপ্তভাবে দলবদ্ধ করছেন না - সম্ভবত তারা এলোমেলোভাবে সেই তালিকা জুড়ে ছড়িয়ে ছিটিয়ে রয়েছে। সম্ভাব্য, তারপরে, সেই বস্তুর আপডেট পদ্ধতিতে প্রতিটি কল (সেই পদ্ধতিটি বিশ্বব্যাপী ফাংশন কিনা বা না এবং বস্তুর তুলনায় ডাটা ডাটা বা "গ্লোবাল ডেটা" রয়েছে এমন কিছু সারণীতে ভেসে বেড়াচ্ছে যা আপনি সূচী করছেন বা যা কিছু) শেষ লুপ পুনরাবৃত্তির আপডেট কল থেকে পৃথক।
এটি সিস্টেমে বাড়তি চাপ তৈরি করতে পারে কারণ আপনার মেমরিটিকে মেমরির ভিতরে এবং বাইরে প্রাসঙ্গিক ফাংশন দিয়ে মেমরি পৃষ্ঠা করতে এবং নির্দেশের ক্যাশে আরও ঘন ঘন পুনরায় পূরণ করতে পারে, যার ফলে ধীর লুপ হয়। খালি চোখে এটি পর্যবেক্ষণযোগ্য কিনা (বা এমনকি একজন প্রোফাইলার এমনকি) এটি নির্ভর করে যে "গেম অবজেক্ট" হিসাবে বিবেচিত , ঠিক তার মধ্যে কতগুলি গড়ে গড়ে থাকে এবং আপনার প্রয়োগে আর কী চলছে on
অংশ-ভিত্তিক অবজেক্ট সিস্টেমগুলি এখনই একটি জনপ্রিয় প্রবণতা, এই দর্শনকে উত্তোলন করে যে সমষ্টি উত্তরাধিকারের চেয়ে অগ্রাধিকারযোগ্য । এই জাতীয় সিস্টেমগুলি আপনাকে সম্ভাব্যভাবে উপাদানগুলির "আপডেট" যুক্তিকে বিভক্ত করার অনুমতি দেয় (যেখানে "উপাদান" কার্যকারিতার কিছু ইউনিট হিসাবে মোটামুটি সংজ্ঞায়িত করা হয়, যেমন পদার্থ যা কোনও পদার্থের শারীরিকভাবে সিমুলেটেড অংশকে উপস্থাপন করে যা পদার্থবিজ্ঞান সিস্টেম দ্বারা প্রক্রিয়াজাত হয়) ) একাধিক থ্রেডে - উপাদান উপাদান দ্বারা বৈষম্যযুক্ত - যদি সম্ভব হয় এবং পছন্দসই হয়, যা পারফরম্যান্স লাভ করতে পারে। খুব কমপক্ষে আপনি উপাদানগুলি এমনভাবে সংগঠিত করতে পারেন যে প্রদত্ত প্রকারের সমস্ত উপাদান একসাথে সিপিইউর ক্যাশে অনুকূল ব্যবহার করে update এই থ্রেডে এই জাতীয় উপাদানগুলির উদাহরণ হিসাবে আলোচনা করা হয়েছে ।
এই ধরনের সিস্টেমগুলি প্রায়শই অত্যন্ত ডিক্লোলড হয়, যা রক্ষণাবেক্ষণের জন্যও একটি वरदान।
ডেটা-ওরিয়েন্টেড ডিজাইন একটি সম্পর্কিত পদ্ধতির - এটি প্রথম অগ্রাধিকার হিসাবে অবজেক্টের প্রয়োজনীয় ডেটাগুলির চারপাশে নিজেকে ওরিয়েন্টিং করা সম্পর্কে, যাতে তথ্যটি কার্যকরভাবে বাল্কে প্রক্রিয়া করা যায় (উদাহরণস্বরূপ)। এর অর্থ সাধারণত এমন একটি সংস্থা যা একই উদ্দেশ্যে ক্লাস্টারের জন্য ব্যবহৃত ডেটা একসাথে রাখার চেষ্টা করে এবং একসাথে সমস্তটিতে পরিচালিত হয়। এটি ওও ডিজাইনের সাথে মৌলিকভাবে বেমানান নয় এবং আপনি জিডিএসইতে এই প্রশ্নে এই বিষয়ে কিছু বকবক পেতে পারেন ।
ফলস্বরূপ, গেম লুপের জন্য আরও অনুকূল পন্থাটি হবে আপনার আসল পরিবর্তে
foreach(GameObject g in gameObjects) g.update();
আরও কিছু ভালো
ProcessUserInput();
UpdatePhysicsForAllObjects();
UpdateScriptsForAllObjects();
UpdateRenderDataForAllObjects();
RenderEverything();
যেমন একটি বিশ্বের প্রতিটি GameObject
নিজস্ব একটি পয়েন্টার বা রেফারেন্স থাকতে পারে PhysicsData
বা Script
বা RenderData
, মামলা যেখানে আপনি একটি পৃথক ভিত্তিতে বস্তুর সঙ্গে যোগাযোগ করার জন্য প্রয়োজন হতে পারে, কিন্তু জন্য প্রকৃত PhysicsData
, Scripts
, RenderData
, ইত্যাদি সব তাদের নিজ নিজ সাব মালিকানাধীন হবে (পদার্থবিজ্ঞান সিমুলেটর, স্ক্রিপ্ট হোস্টিং পরিবেশ, রেন্ডারার) এবং উপরে উল্লিখিত হিসাবে বাল্কে প্রক্রিয়াজাত করা।
এটি লক্ষ করা খুব গুরুত্বপূর্ণ যে এই পদ্ধতির কোনও যাদু বুলেট নয় এবং সর্বদা কর্মক্ষমতা উন্নতি হবে না (যদিও এটি সাধারণত গভীর উত্তরাধিকার গাছের চেয়ে ভাল নকশা )। আপনি বিশেষত যদি খুব অল্প কিছু অবজেক্ট থাকে বা খুব বেশি অবজেক্ট আপনার পক্ষে কার্যকরভাবে আপডেটগুলির সমান্তরাল করতে না পারেন তবে মূলত কোনও পারফরম্যান্সের পার্থক্য লক্ষ্য করতে পারেন।
দুর্ভাগ্যক্রমে, এমন কোনও ম্যাজিক লুপ নেই যা সর্বাধিক অনুকূল - প্রতিটি খেলা পৃথক এবং বিভিন্ন উপায়ে পারফরম্যান্স টিউনিংয়ের প্রয়োজন হতে পারে। সুতরাং আপনি অন্ধভাবে ইন্টারনেটে কিছু এলোমেলো লোকের পরামর্শ গ্রহণ করার আগে জিনিসগুলি (প্রোফাইল) পরিমাপ করা খুব গুরুত্বপূর্ণ।