টার্ন ভিত্তিক গেমটিতে কোনও সত্তা-উপাদান গেমস্টেট কীভাবে অগ্রগতি করবেন?


9

এখন পর্যন্ত আমি যে সত্তা উপাদান সিস্টেমগুলি ব্যবহার করেছি সেগুলি বেশিরভাগ জাভা এর আর্টেমিসের মতো কাজ করেছে:

  • উপাদানগুলিতে সমস্ত ডেটা
  • স্টেটলেস ইন্ডিপেন্ডেন্ট সিস্টেমস (কমপক্ষে ডিগ্রি পর্যন্ত যে তাদের আরম্ভের ক্ষেত্রে ইনপুট লাগবে না) প্রতিটি সত্তার উপর পুনরুক্তি করা হয় যার মধ্যে কেবল নির্দিষ্ট উপাদান রয়েছে যা নির্দিষ্ট সিস্টেমটিতে আগ্রহী
  • সমস্ত সিস্টেমগুলি তাদের সত্তাকে এক টিক দিয়ে প্রসেস করে, তারপরে পুরো জিনিসটি শুরু হয়।

এখন আমি প্রথমবারের দিকে টার্ন ভিত্তিক গেমটিতে এটি প্রয়োগ করার চেষ্টা করছি, গেমটি এগিয়ে যাওয়ার আগে প্রচুর সংখ্যক ইভেন্ট এবং প্রতিক্রিয়া যা একে অপরের সাথে সম্পর্কিত একটি সেট অর্ডারে অবশ্যই ঘটবে। একটি উদাহরণ:

প্লেয়ার এ একটি তরোয়াল থেকে ক্ষতি পান। এর প্রতিক্রিয়া হিসাবে, এ এর ​​বর্ম লাথি মেরে এবং নেওয়া ক্ষতি হ্রাস করে। দুর্বল হওয়ার ফলে A এর চলাফেরার গতিও হ্রাস করা হয়।

  • ক্ষতিটি হ'ল যা সম্পূর্ণ মিথস্ক্রিয়াটিকে সেট করে
  • খেলোয়াড়ের ক্ষতি হওয়ার আগে আর্মার অবশ্যই গণনা করতে হবে এবং আগত ক্ষতিতে প্রয়োগ করতে হবে
  • চূড়ান্ত ক্ষয়ক্ষতির পরিমাণের উপর নির্ভরশীল যেহেতু ক্ষয়টি প্রকৃতপক্ষে ক্ষতিপূরণ না হওয়া পর্যন্ত গতিবেগের গতি হ্রাস কোনও ইউনিটে প্রয়োগ করা যাবে না।

ইভেন্টগুলি অন্যান্য ইভেন্টগুলিও ট্রিগার করতে পারে। বর্ম ব্যবহার করে তলোয়ারের ক্ষতি হ্রাস করার ফলে তরোয়ালটি ভেঙে যেতে পারে (ক্ষতি হ্রাস কমার আগে এটি অবশ্যই হওয়া উচিত) যার ফলস্বরূপ এটির প্রতিক্রিয়ায় অতিরিক্ত ঘটনা ঘটতে পারে, মূলত ঘটনার পুনরাবৃত্তি মূল্যায়ন।

সব মিলিয়ে এগুলি কয়েকটি সমস্যার কারণ হতে পারে বলে মনে হচ্ছে:

  1. প্রচুর নষ্ট প্রক্রিয়াকরণ চক্র: বেশিরভাগ সিস্টেমে (যে জিনিসগুলি সর্বদা চলমান যেমন রেন্ডারিং হিসাবে সংরক্ষণ করা হয়) যখন কাজ করার "তাদের পালা" না হয় তখন কেবল কিছু করার মতো সার্থকতা নেই এবং গেমটি প্রবেশের অপেক্ষায় বেশিরভাগ সময় ব্যয় করে and একটি বৈধ কাজের রাষ্ট্র। এই পরীক্ষাগুলিতে এই জাতীয় ব্যবস্থাগুলি লিখিত থাকে যা আরও বেশি রাজ্যে গেমটিতে যুক্ত হয় size
  2. কোনও সিস্টেম গেমটিতে উপস্থিত থাকা সত্তাগুলি প্রক্রিয়াজাত করতে পারে কিনা তা জানতে, তাদের অন্যান্য সম্পর্কিত সম্পর্কহীন সত্তা / সিস্টেমের অবস্থা পর্যবেক্ষণ করার জন্য কিছু উপায় প্রয়োজন (ক্ষয়ক্ষতি মোকাবেলার জন্য দায়ী সিনটেমটি জেনে রাখা হয়েছে যে বর্মটি প্রয়োগ করা হয়েছে কিনা)। এটি হয় একাধিক দায়িত্ববোধের সাথে সিস্টেমগুলিকে বিভ্রান্ত করে তোলে, বা প্রতিটি প্রক্রিয়াজাতকরণ চক্রের পরে সত্তা সংগ্রহটি স্ক্যান করার এবং কোনও কাজ করা ঠিক আছে কিনা তা জানিয়ে শ্রোতার একটি সেট সাথে যোগাযোগ করার ছাড়া অন্য কোনও উদ্দেশ্য ছাড়াই অতিরিক্ত সিস্টেমের প্রয়োজনীয়তা তৈরি করে।

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

এটির সমাধানের আরেকটি উপায় হ'ল গেমস স্টেটের অগ্রগতিতে একক সিস্টেমের কাজ করার ফলে উপাদানগুলি যুক্ত / সরানো (বা সম্পূর্ণ নতুন সত্তা তৈরি করা)। এর অর্থ হ'ল যখনই কোনও সিস্টেমে আসলে একটি মিলে যাওয়া সত্তা থাকে, তখনই এটি জেনে যায় যে এটির প্রক্রিয়া করার অনুমতি এটি।

তবে এটি পরবর্তী সিস্টেমগুলিকে ট্রিগার করার জন্য সিস্টেমকে দায়বদ্ধ করে তোলে এবং প্রোগ্রামগুলির আচরণ সম্পর্কে যুক্তিযুক্ত হতে অসুবিধা তৈরি করে যেহেতু কোনও একক সিস্টেমের মিথস্ক্রিয়ার ফলস্বরূপ বাগগুলি প্রদর্শিত হবে না। নতুন সিস্টেম যুক্ত করা আরও শক্ত হয়ে যায় কারণ তারা অন্যান্য সিস্টেমগুলিকে কীভাবে প্রভাবিত করে ঠিক তা না জেনে বাস্তবায়ন করা যায় না (এবং পূর্ববর্তী সিস্টেমগুলি নতুন সিস্টেমগুলির আগ্রহী রাজ্যগুলিকে ট্রিগার করতে সংশোধন করতে হতে পারে), আলাদা আলাদা সিস্টেম থাকার উদ্দেশ্যকে হতাশ করে একক কাজ সহ।

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

গেমের রাজ্যটিকে এগিয়ে নেওয়ার জন্য এমন কিছু নকশার প্যাটার্ন রয়েছে যা এর জন্য উপযুক্ত, বা আমার কি সমস্ত যুক্তি লুপের বাইরে সরিয়ে নেওয়া উচিত এবং পরিবর্তে যখন প্রয়োজন হবে তখনই এটি ট্রিগার করা উচিত?


আপনি সত্যিই কোনও ইভেন্ট হওয়ার জন্য জরিপ করতে চান না। একটি ইভেন্ট তখনই ঘটে যখন তা ঘটে। আর্টেমিস কি সিস্টেমগুলিকে একে অপরের সাথে যোগাযোগের অনুমতি দেয় না?
সিডার

এটি করে তবে কেবল পদ্ধতি ব্যবহার করে তাদের সংযুক্ত করে।
এয়ারিস130

উত্তর:


3

আমার পরামর্শ এখানে একটি আরপিজি প্রকল্পের অতীতের অভিজ্ঞতা থেকে আসছে যেখানে আমরা একটি উপাদান উপাদান ব্যবহার করেছি। আমি বলব যে গেমসাইড কোডটিতে কাজ করা আমি ঘৃণা করি কারণ এটি স্প্যাগেটি কোড ছিল। সুতরাং আমি এখানে খুব বেশি উত্তর দিচ্ছি না, কেবল একটি দৃষ্টিকোণ:

কোনও খেলোয়াড়কে তলোয়ারের ক্ষতি পরিচালনা করার জন্য আপনি যে যুক্তিটি বর্ণনা করেছেন ... মনে হচ্ছে এটির একটি সিস্টেমেরই দায়িত্বে থাকা উচিত।

কোথাও না কোথাও একটি হ্যান্ডলওয়াপন হিট () ফাংশন রয়েছে। এটি প্রাসঙ্গিক বর্মটি পেতে প্লেয়ার সত্তার আর্মার কম্পোনেন্টটি অ্যাক্সেস করতে পারে। এটি সম্ভবত আক্রমণটি ছিন্ন করতে আক্রমণকারী অস্ত্র সত্তার ওয়েপকমম্পন্টে অ্যাক্সেস করবে। চূড়ান্ত ক্ষতি গণনা করার পরে, গতি হ্রাস অর্জনের জন্য প্লেয়ারের জন্য এটি মুভমেন্ট কম্পোনেন্টটিকে স্পর্শ করবে।

যেমন নষ্ট প্রক্রিয়াকরণ চক্র হিসাবে ... হ্যান্ডেলওয়াপন হিট () কেবল তখনই প্রয়োজন হয় যখন তরোয়াল আঘাতটি সনাক্ত করার পরে ট্রিগার করা উচিত।

আমি যে বিন্দুটি তৈরির চেষ্টা করছি তা হ'ল: অবশ্যই আপনি কোডের একটি জায়গা চান যেখানে আপনি ব্রেক ব্রেকপয়েন্ট স্থাপন করতে পারেন, এটি আঘাত করতে পারেন এবং তারপরে তরোয়াল আঘাত হানার পরে যে সমস্ত যুক্তি চালানোর কথা বলে মনে হয় তা চালিয়ে যেতে পারেন। অন্য কথায়, যুক্তি একাধিক সিস্টেমের টিক () ফাংশন জুড়ে ছড়িয়ে দেওয়া উচিত নয়।


এইভাবে এটি করার ফলে আরও আচরণ যুক্ত হওয়ার সাথে হিট () ফাংশনটি বেলুন হয়ে যাবে। আসুন আমরা বলি যে এমন শত্রু আছে যা প্রতিবার তরবারি তার দৃষ্টির লাইনের মধ্যে লক্ষ্য (যে কোনও লক্ষ্য) হিট করে প্রত্যেকবার হাসতে হাসতে পতিত হয়। হ্যান্ডলিওপন হিট কি এটিকে ট্রিগার করার জন্য সত্যই দায়বদ্ধ হতে হবে?
এয়ারিস130

1
আপনার কাছে কঠোরভাবে সমৃদ্ধ লড়াইয়ের অনুক্রম রয়েছে তাই হ্যাঁ, প্রভাবগুলি ট্রিগার প্রভাবের জন্য দায়ী। না সবকিছু সামান্য ব্যবস্থা ছড়িয়ে ভাঙা হয়েছে, এই এক সিস্টেম পরিচালনা করতে দিন কারণ এটি সত্যিই আপনার "যুদ্ধ সিস্টেম" এবং এটা পরিচালনা ... কম্ব্যাট ...
প্যাট্রিক হিউজেস

3

এটি এক বছরের পুরনো প্রশ্ন তবে ইসিএস অধ্যয়ন করার সময় আমি আমার ঘরের তৈরি খেলাটি একই ধরণের সমস্যার মুখোমুখি। আশা করি এটি একটি আলোচনায় বা কমপক্ষে কয়েকটি মন্তব্যে শেষ হবে।

আমি নিশ্চিত নই যে এটি ইসিএস ধারণাগুলিকে লঙ্ঘন করে, তবে কী যদি:

  • ইভেন্টগুলি অবজেক্টগুলিতে সিস্টেমগুলি ইস্যু / সাবস্ক্রাইব করতে একটি ইভেন্টবাস যুক্ত করুন (সত্যিকারের ডেটা আসলে, তবে আমার অনুমানের উপাদান নয়)
  • প্রতিটি মধ্যবর্তী অবস্থার জন্য উপাদান তৈরি করুন

উদাহরণ:

  • ইউজারআইপুট সিস্টেমটি [ড্যামাজডিলার এন্টিটি, ড্যামেজরিসিভার এন্টিটি, দক্ষতা / অস্ত্রের ব্যবহৃত তথ্য] সহ একটি আক্রমণ ইভেন্ট চালিয়েছে]
  • কমব্যাটসিস্টেম এটিতে সাবস্ক্রাইব হয়েছে এবং ড্যামেজরসিভারের জন্য চুরির সুযোগ গণনা করে। যদি ছাঁটাই ব্যর্থ হয় তবে এটি একই পরামিতিগুলির সাথে ক্ষতির ইভেন্টটিকে ট্রিগার করে
  • ড্যামেজসিস্টেম এ জাতীয় ইভেন্টে সাবস্ক্রাইব হয়েছে এবং এভাবে ট্রিগার হয়ে গেছে
  • ড্যামাজিস্টেম স্ট্রেংথ, বেসওয়াইপোন ক্ষতি, এর ধরণ ইত্যাদি ব্যবহার করে এবং এটি একটি নতুন ইনকামিংড্যামেজ কম্পোনেন্টে [ড্যামেজডিলার ইন্টিটি, ফাইনালআউটওকিং ডেমেজ, ড্যামেজটাইপ] সহ লিখে এবং এটি ক্ষতিগ্রস্থ রিসিভার সত্তা / সত্তার সাথে সংযুক্ত করে
  • ড্যামেজ সিস্টেমে একটি বহির্গামী ডেমেজক্যালকুলেটেড গুলি চালায়
  • আর্মারসিস্টেম এটি দ্বারা ট্রিগার হয়, একটি রিসিভার সত্তা বা ইনকামিংড্যামেজ কম্পোনেন্ট বাছাই করার জন্য সত্তাগুলিতে এই ইনকামিংড্যামেজ দিকটি অনুসন্ধান করে (শেষটি সম্ভবত স্প্রেডের সাথে একাধিক অ্যাটাকের জন্য সম্ভবত আরও ভাল হতে পারে) এবং এটিতে প্রয়োগ করা বর্ম এবং ক্ষতির গণনা করে। Swordচ্ছিকভাবে তরোয়াল ছিন্নভিন্ন করার জন্য ইভেন্টগুলি ট্রিগার করে
  • আর্মারসিস্টেমগুলি প্রতিটি সত্তায় ইনকামিংড্যামেজ কম্পোনেন্টটি সরিয়ে দেয় এবং এটি ড্যামেজের রিসিপড কম্পোনেন্টের সাথে চূড়ান্ত গণনা করা সংখ্যার সাথে প্রতিস্থাপন করে যা ক্ষত থেকে এইচপি এবং গতি হ্রাসকে প্রভাবিত করবে
  • আর্মারসিস্টেমগুলি একটি ইনকামিংড্যামেজক্যালকুলেটেড ইভেন্ট প্রেরণ করে
  • গতি সিস্টেম সাবস্ক্রাইব করা হয় এবং গতি পুনরায় গণনা করে
  • হেলথ সিস্টেম সাবস্ক্রাইব হয়েছে এবং আসল এইচপি হ্রাস করে
  • ইত্যাদি
  • একরকম পরিষ্কার

পেশাদাররা:

  • জটিল চেইনের ইভেন্টগুলির জন্য অন্তর্বর্তী ডেটা সরবরাহ করে সিস্টেম একে অপরকে ট্রিগার করে
  • ইভেন্টবাস দ্বারা ডিকম্পলিং

কনস:

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

2

সমাধানটি পোস্ট করার পরে আমি শেষ পর্যন্ত স্থির হয়ে গেলাম, ইয়াকোভ্লেভের মতো।

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

সিস্টেমগুলি একটি ইভেন্ট ও একটি সত্তাকে ইনপুট হিসাবে গ্রহণ করে এমন একটি আগস্ট পদ্ধতি বাস্তবায়িত করে, এটি সত্তরটি ইভেন্টটি গ্রহণ করেছে তা বোঝায়। প্রতিটি সিস্টেম উপাদানগুলির নির্দিষ্ট সেট সহ ইভেন্ট এবং সত্তায় সাবস্ক্রাইব করে। সিস্টেমে উপলব্ধ যোগাযোগের একমাত্র পয়েন্ট হ'ল সত্তা ম্যানেজার সিঙ্গেলটন, সত্ত্বাকে ইভেন্ট প্রেরণ করতে এবং নির্দিষ্ট সত্তা থেকে উপাদানগুলি পুনরুদ্ধার করতে ব্যবহৃত হয়।

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

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

এটি একটি আর্মার সিস্টেম সন্নিবেশ করা সহজ করে যা একটি আর্মার উপাদান সহ সত্তায় প্রেরিত ইভেন্টগুলির ক্ষতিতে সাবস্ক্রাইব করে। এটির আগস্ট পদ্ধতিটি উপাদানটির বর্মের পরিমাণ দ্বারা ইভেন্টের ক্ষতি হ্রাস করে। এর অর্থ হ'ল সিস্টেমগুলি ইভেন্টগুলি গেমের যুক্তিকে প্রভাবিত করে এমন আদেশটি নির্দিষ্ট করে, যেহেতু আর্মার সিস্টেমে কাজ করার জন্য ক্ষতির সিস্টেমের আগে ক্ষতি ইভেন্টটি প্রক্রিয়া করা উচিত।

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

একটি বিষয় উঠে এসেছিল তা হল যে কীভাবে প্রতিক্রিয়া-ইভেন্টগুলি প্রেরণ করা হয় তার ক্রিয়াকলাপ করা যায় তা নিশ্চিত করে, কিছু প্রতিক্রিয়া অতিরিক্ত প্রতিক্রিয়া দেখা দিতে পারে। উদাহরণ:

খেলোয়াড় সরে যায়, কোনও আন্দোলনের ইভেন্টকে প্লেয়ার সত্তায় প্রেরণ এবং আন্দোলন সিস্টেম দ্বারা তুলে নেওয়ার অনুরোধ জানায়।

কাতারে: আন্দোলন

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

কাতারে: টার্নওভার

এখন বলুন যে খেলোয়াড় একটি ফাঁদে পা রেখেছিলেন, যার ফলে ক্ষয়ক্ষতি ঘটে। টার্নফিনিশড সিস্টেমের আগে ট্র্যাপসিস্টেমটি আন্দোলনের বার্তা পায়, তাই ক্ষতির ইভেন্টটি প্রথমে প্রেরণ করা হয়। পরিবর্তে এখন সারিটি দেখতে এরকম দেখাচ্ছে:

কাতারে: ক্ষয়ক্ষতি, টার্নওভার

এখন পর্যন্ত সব ঠিক আছে, ক্ষতির ইভেন্টটি প্রক্রিয়া করা হবে এবং তারপরে টার্নটি শেষ হবে। তবে, ক্ষতির প্রতিক্রিয়া হিসাবে যদি অতিরিক্ত ইভেন্টগুলি প্রেরণ করা হয় তবে কী হবে? এখন ইভেন্টের সারির মত দেখতে হবে:

কাতারে: ক্ষয়ক্ষতি, টার্নওভার, রেসপন্সটোড্যামেজ

অন্য কথায়, ক্ষতির কোনও প্রতিক্রিয়া প্রক্রিয়া করার আগেই মোড়টি শেষ হবে।

এটি সমাধানের জন্য আমি ইভেন্টগুলি প্রেরণের দুটি পদ্ধতি ব্যবহার করে শেষ করেছি: প্রেরণ করুন (ইভেন্ট, সত্তা) এবং প্রতিক্রিয়া জানান (ইভেন্ট, ইভেন্টটিও রিসপন্ডটো, সত্তা)।

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

তার উপরে, একটি চলক-দৈর্ঘ্যের অ্যারে একাধিক ইভেন্টের সারি ধারণ করতে ব্যবহৃত হয়। ম্যানেজারের দ্বারা যখনই কোনও ইভেন্ট গৃহীত হয়, ইভেন্টটি অ্যারের সূচকটিতে একটি কাতারে যুক্ত হয় যা প্রতিক্রিয়া শৃঙ্খলে ইভেন্টের পরিমাণের সাথে মেলে। সুতরাং প্রাথমিক মুভমেন্ট ইভেন্টটি [0] -র কাতারে যুক্ত হয় এবং ক্ষতি, পাশাপাশি টার্নওভার ইভেন্টগুলি পৃথক কাতারে যোগ করা হয় [1] যেহেতু তারা উভয়ই আন্দোলনের প্রতিক্রিয়া হিসাবে প্রেরণ করা হয়েছিল।

যখন ক্ষতির ইভেন্টের প্রতিক্রিয়াগুলি প্রেরণ করা হয়, তখন সেই ইভেন্টগুলিতে ক্ষতির ঘটনা নিজেই, পাশাপাশি চলাফেরা উভয়ই থাকে যা সেগুলি সূচকে একটি কাতারে রাখে [২]। যতক্ষণ ইনডেক্স [এন] এর কাতারে ইভেন্ট থাকে ততক্ষণ এই ইভেন্টগুলিকে [এন -1] এ যাওয়ার আগে প্রক্রিয়া করা হবে। এটি এর প্রসেসিং অর্ডার দেয়:

চলাচল -> ক্ষয়ক্ষতি [1] -> প্রতিক্রিয়া টোড্যামেজ [2] -> [2] খালি -> টার্নওভার [1] -> [1] খালি -> [0] খালি

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