এখন পর্যন্ত আমি যে সত্তা উপাদান সিস্টেমগুলি ব্যবহার করেছি সেগুলি বেশিরভাগ জাভা এর আর্টেমিসের মতো কাজ করেছে:
- উপাদানগুলিতে সমস্ত ডেটা
- স্টেটলেস ইন্ডিপেন্ডেন্ট সিস্টেমস (কমপক্ষে ডিগ্রি পর্যন্ত যে তাদের আরম্ভের ক্ষেত্রে ইনপুট লাগবে না) প্রতিটি সত্তার উপর পুনরুক্তি করা হয় যার মধ্যে কেবল নির্দিষ্ট উপাদান রয়েছে যা নির্দিষ্ট সিস্টেমটিতে আগ্রহী
- সমস্ত সিস্টেমগুলি তাদের সত্তাকে এক টিক দিয়ে প্রসেস করে, তারপরে পুরো জিনিসটি শুরু হয়।
এখন আমি প্রথমবারের দিকে টার্ন ভিত্তিক গেমটিতে এটি প্রয়োগ করার চেষ্টা করছি, গেমটি এগিয়ে যাওয়ার আগে প্রচুর সংখ্যক ইভেন্ট এবং প্রতিক্রিয়া যা একে অপরের সাথে সম্পর্কিত একটি সেট অর্ডারে অবশ্যই ঘটবে। একটি উদাহরণ:
প্লেয়ার এ একটি তরোয়াল থেকে ক্ষতি পান। এর প্রতিক্রিয়া হিসাবে, এ এর বর্ম লাথি মেরে এবং নেওয়া ক্ষতি হ্রাস করে। দুর্বল হওয়ার ফলে A এর চলাফেরার গতিও হ্রাস করা হয়।
- ক্ষতিটি হ'ল যা সম্পূর্ণ মিথস্ক্রিয়াটিকে সেট করে
- খেলোয়াড়ের ক্ষতি হওয়ার আগে আর্মার অবশ্যই গণনা করতে হবে এবং আগত ক্ষতিতে প্রয়োগ করতে হবে
- চূড়ান্ত ক্ষয়ক্ষতির পরিমাণের উপর নির্ভরশীল যেহেতু ক্ষয়টি প্রকৃতপক্ষে ক্ষতিপূরণ না হওয়া পর্যন্ত গতিবেগের গতি হ্রাস কোনও ইউনিটে প্রয়োগ করা যাবে না।
ইভেন্টগুলি অন্যান্য ইভেন্টগুলিও ট্রিগার করতে পারে। বর্ম ব্যবহার করে তলোয়ারের ক্ষতি হ্রাস করার ফলে তরোয়ালটি ভেঙে যেতে পারে (ক্ষতি হ্রাস কমার আগে এটি অবশ্যই হওয়া উচিত) যার ফলস্বরূপ এটির প্রতিক্রিয়ায় অতিরিক্ত ঘটনা ঘটতে পারে, মূলত ঘটনার পুনরাবৃত্তি মূল্যায়ন।
সব মিলিয়ে এগুলি কয়েকটি সমস্যার কারণ হতে পারে বলে মনে হচ্ছে:
- প্রচুর নষ্ট প্রক্রিয়াকরণ চক্র: বেশিরভাগ সিস্টেমে (যে জিনিসগুলি সর্বদা চলমান যেমন রেন্ডারিং হিসাবে সংরক্ষণ করা হয়) যখন কাজ করার "তাদের পালা" না হয় তখন কেবল কিছু করার মতো সার্থকতা নেই এবং গেমটি প্রবেশের অপেক্ষায় বেশিরভাগ সময় ব্যয় করে and একটি বৈধ কাজের রাষ্ট্র। এই পরীক্ষাগুলিতে এই জাতীয় ব্যবস্থাগুলি লিখিত থাকে যা আরও বেশি রাজ্যে গেমটিতে যুক্ত হয় size
- কোনও সিস্টেম গেমটিতে উপস্থিত থাকা সত্তাগুলি প্রক্রিয়াজাত করতে পারে কিনা তা জানতে, তাদের অন্যান্য সম্পর্কিত সম্পর্কহীন সত্তা / সিস্টেমের অবস্থা পর্যবেক্ষণ করার জন্য কিছু উপায় প্রয়োজন (ক্ষয়ক্ষতি মোকাবেলার জন্য দায়ী সিনটেমটি জেনে রাখা হয়েছে যে বর্মটি প্রয়োগ করা হয়েছে কিনা)। এটি হয় একাধিক দায়িত্ববোধের সাথে সিস্টেমগুলিকে বিভ্রান্ত করে তোলে, বা প্রতিটি প্রক্রিয়াজাতকরণ চক্রের পরে সত্তা সংগ্রহটি স্ক্যান করার এবং কোনও কাজ করা ঠিক আছে কিনা তা জানিয়ে শ্রোতার একটি সেট সাথে যোগাযোগ করার ছাড়া অন্য কোনও উদ্দেশ্য ছাড়াই অতিরিক্ত সিস্টেমের প্রয়োজনীয়তা তৈরি করে।
উপরোক্ত দুটি পয়েন্ট ধরে ধরে নেওয়া হয়েছে যে সিস্টেমগুলি একই সংস্থাগুলির একই সেটে কাজ করে, যা তাদের উপাদানগুলিতে পতাকা ব্যবহার করে রাষ্ট্র পরিবর্তন করে।
এটির সমাধানের আরেকটি উপায় হ'ল গেমস স্টেটের অগ্রগতিতে একক সিস্টেমের কাজ করার ফলে উপাদানগুলি যুক্ত / সরানো (বা সম্পূর্ণ নতুন সত্তা তৈরি করা)। এর অর্থ হ'ল যখনই কোনও সিস্টেমে আসলে একটি মিলে যাওয়া সত্তা থাকে, তখনই এটি জেনে যায় যে এটির প্রক্রিয়া করার অনুমতি এটি।
তবে এটি পরবর্তী সিস্টেমগুলিকে ট্রিগার করার জন্য সিস্টেমকে দায়বদ্ধ করে তোলে এবং প্রোগ্রামগুলির আচরণ সম্পর্কে যুক্তিযুক্ত হতে অসুবিধা তৈরি করে যেহেতু কোনও একক সিস্টেমের মিথস্ক্রিয়ার ফলস্বরূপ বাগগুলি প্রদর্শিত হবে না। নতুন সিস্টেম যুক্ত করা আরও শক্ত হয়ে যায় কারণ তারা অন্যান্য সিস্টেমগুলিকে কীভাবে প্রভাবিত করে ঠিক তা না জেনে বাস্তবায়ন করা যায় না (এবং পূর্ববর্তী সিস্টেমগুলি নতুন সিস্টেমগুলির আগ্রহী রাজ্যগুলিকে ট্রিগার করতে সংশোধন করতে হতে পারে), আলাদা আলাদা সিস্টেম থাকার উদ্দেশ্যকে হতাশ করে একক কাজ সহ।
এটি কি আমার সাথে বাঁচতে হবে? প্রত্যেকটি ইসিএস উদাহরণ আমি দেখেছি সত্যিকারের সময় হয়েছে, এবং এই ক্ষেত্রে এটি প্রতি-গেম-লুপের প্রতি এক-পুনরাবৃত্তি কীভাবে কাজ করে তা দেখতে খুব সহজ। এবং এখনও রেন্ডারিংয়ের জন্য আমার এটির প্রয়োজন আছে, এটি সিস্টেমের জন্য সত্যই অযোগ্য বলে মনে হয় যা প্রতিবারই কিছু ঘটেছিল তার বেশিরভাগ দিকগুলিকে বিরতি দেয়।
গেমের রাজ্যটিকে এগিয়ে নেওয়ার জন্য এমন কিছু নকশার প্যাটার্ন রয়েছে যা এর জন্য উপযুক্ত, বা আমার কি সমস্ত যুক্তি লুপের বাইরে সরিয়ে নেওয়া উচিত এবং পরিবর্তে যখন প্রয়োজন হবে তখনই এটি ট্রিগার করা উচিত?