বিভিন্ন ধরণের সত্তার তালিকা পরিচালনা করা - এর চেয়ে ভাল উপায় কি আছে?


9

আমি মোবাইল ডিভাইসগুলির জন্য একটি 2 ডি স্পেস গেমটি বিকাশ করছি তবে এটি বাস্তব জটিল হয়ে পড়ে এবং আমার সমাধানটি সত্যই বিভ্রান্ত হয় এবং প্রচুর পুনরাবৃত্তি কোড বিভাগ তৈরি করে।

আমি একটি বিশ্বমানের হাভা পেয়েছি যেখানে আমার কাছে বিভিন্ন অবজেক্টের একাধিক তালিকা রয়েছে যেমন:

List<Enemy> enemys;
List<Projectile> projectiles;
List<Collectable> collectables;
List<Asteroid> asteroids;
List<Effect> effects;
..

প্রতিটি তালিকা বিশ্বমানের দ্বারা আপডেট হয়। তবে সব কিছু নয় .. প্রতিটি শত্রুতে ইঞ্জিনের একটি তালিকা রয়েছে, এবং অস্ত্রশস্ত্রের তালিকা রয়েছে যা শত্রু দ্বারা আপডেট হয়। এখন প্রতিটি ইঞ্জিন ওয়ার্ল্ড লিস্টের 'ইফেক্টস'-এ কিছু ফায়ার এফেক্ট যুক্ত করে এবং প্রত্যেকটি অস্ত্রশস্ত্রই বিশ্বের প্রজেক্টিসিয়ালগুলিকে বিশ্বের তালিকায় যুক্ত করে। এই সমস্ত ক্লাসের বিভিন্ন প্যারামিটার রয়েছে, তাই আমার প্রতিটি শ্রেণির জন্য একটি অতিরিক্ত আপডেট এবং অতিরিক্ত রেন্ডার ফাংশন প্রয়োজন।

কমপক্ষে তারা 'গেমওজেক্ট' এর সমস্ত শিশু, যা তাদের অবস্থান, বেগ এবং ত্বরণ ভেক্টরগুলির মতো মৌলিক বিষয়াদি সরবরাহ করে, বহুভুজকে আবদ্ধ করে এবং অ্যাপ্লিকেশন এবং একটি সীমাবদ্ধ রাষ্ট্রের মেশিনের মতো কাজ করে

এটি করার জন্য আরও ভাল বা আরও সাধারণ উপায় আছে কি? একটি ক্যাচ-অল ক্লাসের মতো যাতে সমস্ত বিভিন্ন অবজেক্টের জন্য সম্ভাব্য পরামিতি এবং পদ্ধতি রয়েছে। (আমি মনে করি এটি আরও বিভ্রান্তিকর কোড তৈরি করবে)


এটি আমার প্রশ্নের অনুরূপ: গেমদেব.স্ট্যাকেক্সেঞ্জার.কম / সেকশনস / ২২৫59৫/২ আমি প্রস্তাবিত উত্তরগুলি দেখার জন্য পরামর্শ দিই।
ডেরেক

উত্তর:


5

এটি করার জন্য আরও ভাল বা আরও সাধারণ উপায় আছে কি? একটি ক্যাচ-অল ক্লাসের মতো যাতে সমস্ত বিভিন্ন অবজেক্টের জন্য সম্ভাব্য পরামিতি এবং পদ্ধতি রয়েছে।

হ্যাঁ, এটিকে বলা হয় স্থাপত্য। একটি চেহারা আছে এখানে বিস্তারিত জানার জন্য।

এটি আপনার বিশ্বমানের শ্রেণীর সত্ত্বার একটি মাত্র তালিকা দিতে দেয়:

List<Entity>

এটি উত্তরাধিকারের ওপরে রচনাটির একটি উদাহরণ ।


3

আপনার আসল প্রশ্নের সীমানার মধ্যে একটি বিকল্প হ'ল তালিকাগুলি তালিকাগুলি আপনার পছন্দ মতো প্রকারের পরিবর্তে অ্যাকশনে করা উচিত। উদাহরণস্বরূপ, আপনার কাছে একটি রয়েছে List<HasAI>এবং List<Collidable>আপনি যখন একটি নতুন অবজেক্ট তৈরি করেন তখন এটি প্রয়োজনীয় ক্রিয়া তালিকার সাথে নিজেকে যুক্ত করে দেয়, যখন বস্তুটি ধ্বংস হয়ে যায় তখন তা সেই তালিকা থেকে নিজেকে সরিয়ে দেয়। একটি অবজেক্ট একাধিক তালিকায় থাকতে পারে।

এই বিকল্পের দ্বিতীয় ধাপটি হ'ল আপনার ক্লাসগুলি হায়ারার্কি থেকে ইন্টারফেসগুলি ব্যবহার করে এমন একের মধ্যে রিফ্যাক্টর করা, সুতরাং আপনার হাসা টাইপ একটি শ্রেণি যা আইব্রেইন ইন্টারফেসকে উদাহরণ হিসাবে প্রয়োগ করে। List<HasAI>মেলে যে কেবলমাত্র আইব্রাইন ইন্টারফেসের জন্য বস্তুর প্রয়োজন।

এটি জটিলতা কিছু পরিষ্কার করতে সাহায্য করা উচিত।


2

আমার মনে হয় আপনার যা করা দরকার তা হ'ল তার নিজস্ব ক্লাসগুলিতে রেন্ডারিং করা, আমি মনে করি খেলোয়াড়ের জন্য একটি এবং শত্রুর জন্য একটি (অথবা সম্ভবত খেলোয়াড়ের জন্য কেবল একটি, এবং তারপরে এটি খেলোয়াড় এবং শত্রুর জন্য একটি উদাহরণ তৈরি করবে - 100% নিশ্চিত নয়) আপনার গেম ডিজাইন।)

আপনি বিভিন্ন অবজেক্টের আশেপাশে রেন্ডারটিকে লুপ করতে এবং কোনটি আঁকবেন তা স্থির করতে একটি দর্শনার্থীর প্যাটার্ন ব্যবহার করতে পারেন, এটি কম জটিল হতে পারে।


2

বেস ক্লাস ব্যবহার করা এবং পলিমারফিজমের উপর নির্ভর করা খুব ভাল ধারণা। তবে কিছু বিকল্প পন্থা রয়েছে। নোয়েল ললোপিসের দুটি নিবন্ধ রয়েছে যেগুলি পড়ার মতো। আমি ডেটা ওরিয়েন্টেড ডিজাইনটি ইদানীং দেখছি এবং মনে করি এটির কিছু যোগ্যতা রয়েছে।

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


1

আপনি ওওপি এবং বিশেষত পলিমারফিজম ব্যবহার করে করতে পারেন।

মূলত, আপনাকে একটি বেস ক্লাস তৈরি করতে হবে, যা সমস্ত গেম সত্তা উত্তরাধিকার সূত্রে প্রাপ্ত। এই বেস ক্লাসটি যতটা সম্ভব বিমূর্ত, এটি একটি ক্রিয়েশন, আপডেট এবং সম্ভবত একটি ধ্বংস ফাংশন হিসাবে থাকবে।

তারপরে আপনি এই ক্লাস থেকে আপনার অন্যান্য সমস্ত গেমের অবজেক্টগুলি পান। আপনার ভাষা যদি আরও সমর্থন করে কিছু উন্নত কাজ করতে সমর্থন করে না তবে আপনার কোডে কিছু ধরণের প্রতিবিম্বও যুক্ত করতে হবে, তবে আপনি কীভাবে আপনার উত্তরাধিকারকে সঠিকভাবে কাঠামোবদ্ধ করতে জানেন তা যদি এড়ানো যায় তবে তা এড়ানো যায়।


1
তিনি ইতিমধ্যে এটি করেছিলেন - তার সমস্ত ক্লাস গেমওজেক্টের শিশু। তাকে কেবল তার তালিকাগুলির সিরিজগুলি গেমঅবজেক্টসের একক তালিকায় পরিণত করতে হবে।
সোমগুয়ে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.