উপাদান / সত্তা-ভিত্তিক নকশা + আচরণ গাছগুলি => কীভাবে সংহত করবেন?


9

আমার বর্তমান প্রকল্পের জন্য আমি একটি উপাদান / সত্তা-ভিত্তিক সিস্টেমটি বাস্তবায়িত করেছি , মূলত এই পরিবর্তে অপরিজ্ঞাত ক্ষেত্রে রয়েছে বেশিরভাগ সেরা অনুশীলনের অনুসরণ করে ।

সুতরাং আমি (সামান্য প্রসারিত) সত্তা পেয়েছি , যা মূলত একটি intআইডি, একটি মানব-পঠনযোগ্য নাম, std::mapউপাদানগুলির একটি এবং একটি long"প্রকারের সূচক" যা কোন উপাদানগুলি উপস্থিত রয়েছে তা দেখানোর জন্য ব্যবহৃত হয় ( enumসমস্ত উপাদানগুলির জন্য আমার দুটিতে শক্তি রয়েছে) প্রকার এবং যখনই সত্তায় কোনও উপাদান যুক্ত হয়, আমি স্বয়ংক্রিয়ভাবে বিটওয়াইজ অপারেশনগুলির মাধ্যমে দীর্ঘ পরিবর্তন করে, এই উত্তরটি তুলনা করি )।

তারপরে উপাদানগুলি রয়েছে , এটি আরও সহজ: intআইডি, enumউপাদান উপাদান হিসাবে প্যারেন্ট সত্তা পয়েন্টার এবং std::mapএই উপাদানটি ধারণ করে এমন সমস্ত বৈশিষ্ট্যের একটি ।

শেষ পর্যন্ত এমন কিছু সিস্টেম / ম্যানেজার যা আসল লজিক প্রসেসিং পরিচালনা করে। তারা প্রথমে এটি পরীক্ষা করে যে বর্তমানে প্রক্রিয়াজাত সত্তার কোনও মিল রয়েছে long"টাইপ সূচক" = সেই সিস্টেমের জন্য প্রয়োজনীয় সমস্ত উপাদান উপস্থিত রয়েছে কিনা। এরপরে এটি প্রয়োজনে কিছু সম্পত্তি অ্যাক্সেস করে এবং হয় সরাসরি সংশ্লিষ্ট উপাদানটিতে কিছু ফাংশন কল করে অথবা কিছু বার্তা প্রেরণ করে (কোনও বার্তা প্রেরণের মাধ্যমে)।

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

এখন আমি সেই প্রকল্পের মধ্যে আচরণ গাছগুলি ( আইগেমডেভ বিটিএসকে ভিত্তিক ) প্রবর্তন করতে চাই , তবে ইতিমধ্যে বিদ্যমান উপাদানগুলির সাথে সেগুলি কীভাবে সংযুক্ত করা উচিত বা কীভাবে সাধারণভাবে সেই নকশাকে সংহত করতে হবে তা আমি নিশ্চিত নই।

বিভিন্ন সম্পর্কিত ধারণা / পয়েন্ট / প্রশ্ন মাথায় আসে:

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

  2. আমি ধরে নিয়েছি যে আমার সমস্ত বিভিন্ন Entityধরণের জন্য আমাকে বিটি তৈরি করতে হবে (সুতরাং প্রতিটি গেম-লজিক / এআই-প্রাসঙ্গিক উপাদানগুলির সংমিশ্রণে আমার একাধিকবার দীর্ঘ "টাইপ সূচক" হিসাবে উল্লিখিত)) ফলস্বরূপ এটি BT Actionউপাদানগুলিতে প্রয়োগগুলি স্থাপন করা বোধগম্য নয় কারণ সম্ভবত প্রতি উপাদান ক্রিয়াকলাপে অনেকগুলি অন্তর্ভুক্ত থাকবে, তাই না?

  3. সুতরাং BT Actionযুক্তিটি কি এক / একাধিক পৃথক সিস্টেমে বসে থাকতে পারে (কার পদ্ধতিতে মানচিত্রটি # 1 পয়েন্ট থেকে ধারণাটি)? সিস্টেমটি তখন আমার long"প্রকারের সূচক" প্রতি পরীক্ষা করবে Entityযে বিটি বর্তমানে যাচাই করা হয়েছে এবং যেটি নির্দিষ্ট ক্রিয়া সম্পাদন করতে বলা হয়েছিল (সিস্টেমে = পদ্ধতি) তা করার অনুমতি দেওয়া হয়েছে কিনা (= প্রয়োজনীয় উপাদান রয়েছে)। তবে তা না হলে (কারণ উদাহরণস্বরূপ বিটি নির্মাতারা একটি নির্দিষ্ট পরিস্থিতিকে উপেক্ষা করেছেন, যেখানে কোনও প্রয়োজনীয় উপাদান রানটাইমের সময় সত্তার সাথে আর সংযুক্ত নাও হতে পারে), কিছুই ঘটবে না।

প্রশ্নাবলী:

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

পুনরায় পয়েন্ট 1: আচরণ গাছগুলি ভিজ্যুয়াল ডিএসএল ছাড়া চরিত্রগত আচরণ তৈরির জন্য ব্যবহৃত বেশ কিছু নয়। একটি আচরণমূলক গাছের উপাদানটি স্ক্রিপ্ট উপাদানগুলির চেয়ে কম বা অন্য কিছু করা উচিত নয়। পুনরায় পয়েন্ট 3: নিয়মিত ক্ষেত্রগুলিতে মানচিত্র ব্যবহার করার কারণ কী?
এরিক 14

# 1: "ডিএসএল" এই প্রসঙ্গে কী বোঝায়? # 3: দুঃখিত, তবে আমি এটি অনুসরণ করতে পারি না। আপনার বোঝাতে দয়া করে বোঝানোর জন্য যত্নশীল?
ফিলিপ অলগায়ের

1
সম্ভবত ডোমেন নির্দিষ্ট ভাষা, যেমন। খুব নির্দিষ্ট সমস্যা নিয়ে কাজ করার জন্য একটি কাস্টম বাক্য গঠন।
প্যাট্রিক হিউজেস

প্যাট্রিক সঠিক, যদিও শব্দার্থবিজ্ঞানও এর অংশ এবং এটি "সংজ্ঞা" থেকে এই সংজ্ঞাটি বাদ পড়তে পারে। - পুনরায় 3: আমার ক্ষমাপ্রার্থনা, এটি পড়তে হবে: " উপাদানগুলিতে নিয়মিত ক্ষেত্রগুলির উপর কোনও মানচিত্র ব্যবহার করার কারণ কী ?"
এরিক

পুনরায় 3: আমি পরে সি ++ কোডের বাইরে অতিরিক্ত বৈশিষ্ট্যগুলি গতিশীলভাবে নির্দিষ্ট করার ক্ষমতাটি চাই (বুজওয়ার্ড: ডেটা-চালিত)। সরলতার স্বার্থে আমি (কমপক্ষে এখনের জন্য) সমস্ত সম্পত্তি এই জেনেরিক কাঠামোর (মানচিত্র ব্যবহার করে) রেখেছি, এমনকি কোডগুলিতে স্থির হওয়া এবং তাই আসল সি ++ ক্ষেত্র হতে পারে। পরবর্তীতে এটি পুনর্বিবেচনা করতে হবে, যদি এটি কোনও পারফরম্যান্সের সমস্যা হয়ে দাঁড়ায় ...
ফিলিপ অলগায়ার

উত্তর:


2

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

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

ফলস্বরূপ এটি উপাদানগুলিতে বিটি অ্যাকশন বাস্তবায়ন স্থাপন করা বোধগম্য নয় কারণ সম্ভবত প্রতি উপাদান ক্রিয়াকলাপে অনেকগুলি অন্তর্ভুক্ত থাকবে, তাই না?

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

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


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

এর আগে আমি যে মূল জিনিসটি হারিয়েছিলাম তা হ'ল কীভাবে সত্তার সাথে ক্রিয়াটি সংযুক্ত করা যায়। এখন এটি স্পষ্ট: ক্রিয়াগুলি তার গাছের মাধ্যমে কোন সত্তাকে জানে যা বিনিময়ে এটি সত্তার সত্তাটি জানে।
ফিলিপ অলগায়ের

@ ফিলিপ অলগায়ার আমি কৌতূহলী, আপনি কীভাবে বিটি নোড তৈরি করবেন? আপনি কি এটি 1 টি আচরণ নোড = 1 সত্তা হিসাবে তৈরি করেছেন (এটি প্রতি 1 গেমের প্রতি বস্তুতে প্রচুর সত্তা হবে), বা একটি সাধারণ শ্রেণি হিসাবে নোড তৈরি করেছেন (ইসিএস সম্পর্কিত নয়), বা অন্যান্য পদ্ধতির ব্যবহার করেছেন? ধন্যবাদ!
সিপিপিবেগনার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.