মনে করুন আপনার কাছে একটি দুনিয়া , প্লেয়ার এবং বসের সমন্বয়ে একটি দৃশ্য রয়েছে । ওহ, এবং এটি তৃতীয় ব্যক্তি গেম, সুতরাং আপনার কাছে একটি ক্যামেরাও রয়েছে ।
সুতরাং আপনার দৃশ্যটি এর মতো দেখাচ্ছে:
class Scene {
World* world
Player* player
Enemy* boss
Camera* camera
}
(কমপক্ষে, এটি মূল ডেটা you আপনি কীভাবে ডেটা রাখেন তা আপনার উপর নির্ভর করে))
আপনি যখন খেলাটি খেলছেন তখনই আপনি দৃশ্যটি আপডেট এবং রেন্ডার করতে চান, যখন বিরতি দেওয়া হয় না বা মূল মেনুতে থাকে ... সুতরাং আপনি এটিকে গেমের সাথে যুক্ত করুন!
State* gameState = new State();
gameState->addScene(scene);
এখন আপনার গেমের রাজ্যের একটি দৃশ্য আছে। এরপরে, আপনি দৃশ্যে লজিক চালাতে চান এবং দৃশ্যটি রেন্ডার করতে চান। যুক্তির জন্য, আপনি কেবল একটি আপডেট ফাংশন চালান।
State::update(double delta) {
scene->update(delta);
}
আপনি Scene
ক্লাসে সমস্ত গেমের যুক্তি রাখতে পারেন । এবং কেবলমাত্র রেফারেন্সের জন্য, কোনও সত্তা উপাদান সিস্টেম এটি এর পরিবর্তে এটি করতে পারে:
State::update(double delta) {
physicsSystem->applyPhysics(scene);
}
যাইহোক, আপনি এখন আপনার দৃশ্য আপডেট করতে পরিচালনা করেছেন। এখন আপনি এটি প্রদর্শন করতে চান! যার জন্য আমরা উপরের মতো কিছু করি:
State::render() {
renderSystem->render(scene);
}
এই নাও. রেন্ডারসিস্টেমটি দৃশ্য থেকে তথ্যটি পড়ে এবং উপযুক্ত চিত্রটি প্রদর্শন করে। সরলীকৃত, দৃশ্যের রেন্ডারিংয়ের পদ্ধতিটি দেখতে এরকম হতে পারে:
RenderSystem::renderScene(Scene* scene) {
Camera* camera = scene->camera;
lookAt(camera); // Set up the appropriate viewing matrices based on
// the camera location and direction
renderHeightmap(scene->getWorld()->getHeightMap()); // Just as an example, you might
// use a height map as your world
// representation.
renderModel(scene->getPlayer()->getType()); // getType() will return, for example "orc"
// or "human"
renderModel(scene->getBoss()->getType());
}
সত্যিই সরলীকৃত, আপনার এখনও প্রয়োজন যেমন উদাহরণস্বরূপ, আপনার প্লেয়ার কোথায় এবং তিনি কোথায় খুঁজছেন তার উপর ভিত্তি করে একটি ঘূর্ণন এবং অনুবাদ প্রয়োগ করুন। (আমার উদাহরণটি একটি 3 ডি গেম, আপনি যদি 2 ডি নিয়ে যান তবে এটি পার্কে হাঁটতে হবে)।
আমি আশা করি এটি কি আপনি খুঁজছিলেন? আপনি উপরের দিক থেকে আশা করতে পারেন যেহেতু রেন্ডার সিস্টেমটি গেমটির যুক্তি সম্পর্কে চিন্তা করে না । এটি কেবলমাত্র রেন্ডার করার জন্য দৃশ্যের বর্তমান অবস্থা ব্যবহার করে, অর্থাত এটি রেন্ডার করার জন্য এটি থেকে প্রয়োজনীয় তথ্য টেনে তোলে। এবং গেম যুক্তি? রেন্ডারার কী করে তা বিবেচ্য নয়। মুরগি, এটা আদৌ প্রদর্শিত হয় কিনা তা চিন্তা করে না!
এবং আপনার কাছে দৃশ্যের সাথে রেন্ডারিং তথ্য সংযুক্ত করার দরকার নেই। এটি পর্যাপ্ত হওয়া উচিত যে রেন্ডারার জানে যে এটি একটি orc রেন্ডার করা দরকার। আপনি ইতিমধ্যে একটি orc মডেল লোড করেছেন, যা রেন্ডারার তখন প্রদর্শন করতে জানে।
এটি আপনার প্রয়োজনীয়তা পূরণ করা উচিত। গ্রাফিক উপস্থাপনা এবং যুক্তি মিলিত হয় , কারণ তারা উভয়ই একই ডেটা ব্যবহার করে। তবুও তারা পৃথক , কারণ অন্যটির উপর নির্ভর করে না!
সম্পাদনা: এবং কেবল উত্তর দেওয়ার জন্য কেন কেউ এটি এমন করবে? কারণ এটি সহজতম সরল কারণ। আপনার "" এ জাতীয় এবং এরকম ঘটেছিল "সম্পর্কে ভাবার দরকার নেই, আমার এখন গ্রাফিকগুলি আপডেট করা উচিত। পরিবর্তে আপনি স্টাফগুলি ঘটায় এবং প্রতিটি ফ্রেম গেমটি বর্তমানে কী ঘটছে তা দেখে এবং এটি আপনাকে কোনও অন-স্ক্রিন ফলাফল দেয় বলে কোনওভাবে ব্যাখ্যা করে।