এটি সাধারণত বার্তা ব্যবহার করে করা হয়। আপনি এখানে বা সেখানকার মতো এই সাইটে অন্যান্য প্রশ্নের মধ্যে প্রচুর বিশদ জানতে পারেন ।
আপনার নির্দিষ্ট উদাহরণটির উত্তর দেওয়ার জন্য, যাওয়ার একটি উপায় হল একটি ছোট Messageশ্রেণীর সংজ্ঞা দেওয়া যা আপনার জিনিসগুলি প্রক্রিয়া করতে পারে, যেমন:
struct Message
{
Message(const Objt& sender, const std::string& msg)
: m_sender(&sender)
, m_msg(msg) {}
const Obj* m_sender;
std::string m_msg;
};
void Obj::Process(const Message& msg)
{
for (int i=0; i<m_components.size(); ++i)
{
// let components do some stuff with msg
m_components[i].Process(msg);
}
}
এই Objউপাদানটি সম্পর্কিত উপাদানগুলির সাথে আপনি শ্রেণিক ইন্টারফেসটিকে "দূষিত" করছেন না । কিছু উপাদান বার্তাটি প্রক্রিয়া করার জন্য চয়ন করতে পারে, কিছু এটি এড়িয়ে যেতে পারে।
আপনি অন্য কোনও অবজেক্ট থেকে সরাসরি এই পদ্ধতিটি কল করে শুরু করতে পারেন:
Message msg(obj1, "EmitForce(5.0,0.0,0.0)");
obj2.ProcessMessage(msg);
এই ক্ষেত্রে, obj2এর Physicsবার্তা বাছাই, এবং যাই হোক না কেন প্রক্রিয়াকরণের এটা করতে প্রয়োজন হবে। হয়ে গেলে এটি হয়:
- স্বকে একটি "সেটপজিশন" বার্তা প্রেরণ করুন, যে
Positionউপাদানটি বেছে নেবে;
- বা
Positionপরিবর্তনের জন্য সরাসরি উপাদানটি অ্যাক্সেস করুন (খাঁটি উপাদান-ভিত্তিক নকশার জন্য বেশ ভুল, আপনি প্রতিটি বস্তুর একটি Positionউপাদান অনুমান করতে পারবেন না , তবে Positionউপাদানটি প্রয়োজনীয় হতে পারে Physics)।
পরবর্তী উপাদানগুলির আপডেটে বার্তাটির প্রকৃত প্রসেসিংয়ে বিলম্ব করা সাধারণত একটি ভাল ধারণা । এটির তাত্ক্ষণিক প্রক্রিয়াটি অর্থ অন্য বস্তুর অন্যান্য উপাদানগুলিতে বার্তা প্রেরণ করতে পারে, সুতরাং কেবলমাত্র একটি বার্তা প্রেরণে দ্রুত বোঝা যায় একটি অযৌক্তিক স্প্যাগেটি স্ট্যাক।
আপনাকে সম্ভবত পরে আরও উন্নত সিস্টেমে যেতে হবে: অ্যাসিনক্রোনাস বার্তা সারি, অবজেক্টের গোষ্ঠীতে বার্তা প্রেরণ, প্রতি-উপাদান নিবন্ধকরণ / বার্তা থেকে নিবন্ধনকরণ ইত্যাদি etc.
Messageউপরে দেখানো কিন্তু রানটাইম এ প্রক্রিয়া স্ট্রিং সত্যিই দক্ষ নয় বর্গ একটি সহজ স্ট্রিং এর জন্য একটি জেনেরিক ধারক হতে পারে না। আপনি জেনেরিক মানের একটি ধারক যেতে পারেন: স্ট্রিংস, পূর্ণসংখ্যার, ভাসমান ... একটি নাম সহ বা আরও ভাল, একটি আইডি সহ বিভিন্ন ধরণের বার্তাগুলি আলাদা করতে। অথবা আপনি নির্দিষ্ট প্রয়োজনগুলির সাথে ফিট করার জন্য একটি বেস ক্লাসও অর্জন করতে পারেন। আপনার ক্ষেত্রে, আপনি এমন কোনও কল্পনা করতে পারেন EmitForceMessageযা থেকে উদ্ভূত হয়েছে Messageএবং কাঙ্ক্ষিত বল ভেক্টর যুক্ত করেছে - তবে আপনি যদি এটি করেন তবে আরটিটিআইয়ের রানটাইম ব্যয় থেকে সাবধান থাকুন ।