এটি এই প্রশ্নের অনুসরণ, যা আমি উত্তর দিয়েছি, তবে এটি একটি আরও নির্দিষ্ট বিষয় নিয়ে কাজ করে।
এই উত্তরটি আমাকে নিবন্ধের চেয়ে আরও ভালভাবে সত্তা সিস্টেমগুলি বুঝতে সহায়তা করেছে।
সত্তা সিস্টেমগুলি সম্পর্কে আমি (হ্যাঁ, দ্য) নিবন্ধটি পড়েছি এবং এটি আমাকে নিম্নলিখিতটি জানিয়েছে:
সংস্থাগুলো শুধু একটি আইডি এবং উপাদান একটি অ্যারের (প্রবন্ধ বলছেন যে উপাদান মধ্যে সত্ত্বা সংরক্ষণকারী জিনিসগুলি এটি একটি দুর্দান্ত উপায় হয় না, কিন্তু একটি বিকল্প উপলব্ধ করা হয় না) হয়।
উপাদানগুলি হ'ল ডেটার টুকরো, যা নির্দিষ্ট সত্তা দিয়ে কী করা যায় তা নির্দেশ করে।
সিস্টেমগুলি হ'ল "পদ্ধতি", তারা সত্তায় ডেটা ম্যানিপুলেশন সম্পাদন করে।
এটি অনেক পরিস্থিতিতে সত্যিই বাস্তব বলে মনে হচ্ছে, তবে উপাদানগুলির কেবলমাত্র ডেটা ক্লাস হওয়ার অংশটি আমাকে বিরক্ত করছে। উদাহরণস্বরূপ, কীভাবে আমি আমার সেক্টর সিস্টেমে আমার ভেক্টর 2 ডি ক্লাস (অবস্থান) প্রয়োগ করতে পারি?
ভেক্টর 2 ডি শ্রেণিটি ডেটা ধারণ করে: x এবং y স্থানাঙ্ক, তবে এর পদ্ধতিও রয়েছে , যা এর উপযোগের জন্য অত্যন্ত গুরুত্বপূর্ণ এবং শ্রেণিটিকে মাত্র দুটি উপাদান অ্যারে থেকে পৃথক করে। উদাহরণ পদ্ধতিগুলি হল: add()
, rotate(point, r, angle)
, substract()
, normalize()
, এবং সমস্ত অন্যান্য মান দরকারী, এবং একেবারে প্রয়োজন পদ্ধতি অবস্থানের (যা Vector2D ক্লাসের দৃষ্টান্ত হয়) থাকা উচিত যে।
উপাদানটি যদি কেবল কোনও ডেটা ধারক হত তবে এই পদ্ধতিগুলি রাখতে সক্ষম হবেন না!
সম্ভবত পপ আপ হতে পারে এমন একটি সমাধান হ'ল এটি সিস্টেমের অভ্যন্তরে তাদের বাস্তবায়ন করা, তবে এটি অত্যন্ত পাল্টা স্বজ্ঞাত বলে মনে হচ্ছে। এই পদ্ধতিগুলি এমন জিনিস যা আমি এখন সম্পাদন করতে চাই , সেগুলি সম্পূর্ণ এবং ব্যবহারের জন্য প্রস্তুত থাকুন। আমি MovementSystem
কোনও ব্যয়বহুল সেটগুলির সন্ধানের জন্য অপেক্ষা করতে চাই না যা এটি কোনও সত্তার অবস্থানের উপর কোনও গণনা সম্পাদনের নির্দেশ দেয়!
এবং, নিবন্ধটি খুব স্পষ্টভাবে জানিয়েছে যে কেবল সিস্টেমগুলির কোনও কার্যকারিতা থাকা উচিত এবং এর জন্য একমাত্র ব্যাখ্যা, যা আমি খুঁজে পেতে পারি তা হ'ল "ওওপি এড়ানো"। প্রথমত, আমি বুঝতে পারি না কেন সত্তা এবং উপাদানগুলিতে পদ্ধতি ব্যবহার করা থেকে আমাকে বিরত থাকতে হবে। মেমরির ওভারহেড ব্যবহারিকভাবে একই রকম এবং যখন সিস্টেমগুলির সাথে মিলিত হয় তখন এগুলি কার্যকর করা সহজ এবং আকর্ষণীয় উপায়ে একত্রিত হওয়া উচিত। উদাহরণস্বরূপ, সিস্টেমগুলি কেবলমাত্র সত্তা / উপাদানগুলিকে প্রাথমিক যুক্তি সরবরাহ করতে পারে, যা তারা নিজেরাই বাস্তবায়ন জানে। আপনি যদি আমাকে জিজ্ঞাসা করেন - এটি মূলত ইএস এবং ওওপি উভয়ের কাছ থেকে গুডিজ নিচ্ছে, যা নিবন্ধের লেখক অনুসারে করা যায় না তবে আমার কাছে এটি একটি ভাল অনুশীলনের মতো বলে মনে হয়।
এই ভাবে চিন্তা করুন; একটি গেমটিতে বিভিন্ন ধরণের ড্রয়যোগ্য অবজেক্ট রয়েছে। সরল পুরাতন চিত্র, অ্যানিমেশন ( update()
, getCurrentFrame()
ইত্যাদি), এই আদিম ধরণের সংমিশ্রণগুলি এবং এগুলির সমস্তগুলি সহজভাবে draw()
রেন্ডার সিস্টেমকে একটি পদ্ধতি সরবরাহ করতে পারে, যার পরে কেবল কোনও সত্তার স্প্রিট কীভাবে প্রয়োগ করা হয় সে সম্পর্কে যত্ন নেওয়া দরকার না, কেবলমাত্র ইন্টারফেস (অঙ্কন) এবং অবস্থান সম্পর্কে। এবং তারপরে, আমার কেবলমাত্র একটি অ্যানিমেশন সিস্টেমের প্রয়োজন হবে যা অ্যানিমেশন-নির্দিষ্ট পদ্ধতিগুলিকে কল করবে যার সাথে রেন্ডারিংয়ের সাথে কোনও সম্পর্ক নেই।
এবং অন্য একটি জিনিস ... উপাদানগুলি সংরক্ষণের ক্ষেত্রে অ্যারেগুলির আসলেই কোনও বিকল্প আছে? সত্তা শ্রেণীর অভ্যন্তরে অ্যারে ব্যতীত উপাদানগুলি সংরক্ষণের জন্য আমি অন্য কোনও স্থান দেখছি না ...
হতে পারে, এটি আরও ভাল পদ্ধতির: সত্তার সাধারণ বৈশিষ্ট্য হিসাবে উপাদানগুলি সঞ্চয় করুন। উদাহরণস্বরূপ, একটি অবস্থানের উপাদানটি আঠালো হবে entity.position
।
শুধুমাত্র অন্যান্য উপায় একটি অদ্ভুত লুকআপ টেবিল কোন না কোন রকমের হবে ভিতরে , সিস্টেম যে রেফারেন্স বিভিন্ন সত্ত্বা। তবে এটি সত্তার উপাদানগুলি সংরক্ষণ করার চেয়ে বিকাশ করা অত্যন্ত অদক্ষ এবং জটিল বলে মনে হচ্ছে ।