আমি সম্প্রতি একটি 'সত্তা সিস্টেম' ব্যবহার করে একটি সাধারণ স্পেস আক্রমণকারী গেম তৈরি করেছি made এটি এমন একটি প্যাটার্ন যা গুণাবলী এবং আচরণগুলি অত্যন্ত ভালভাবে পৃথক করে। এটি সম্পূর্ণরূপে বুঝতে আমার কয়েকটা পুনরাবৃত্তি লাগল, তবে আপনি যখন কয়েকটি উপাদান ডিজাইন করেছেন এটি আপনার বিদ্যমান উপাদানগুলি ব্যবহার করে নতুন অবজেক্ট রচনা করা অত্যন্ত সহজ হয়ে যায়।
আপনার এটি পড়া উচিত:
http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/
এটি অত্যন্ত জ্ঞাতযোগ্য লোক দ্বারা প্রায়শই আপডেট করা হয়। এটি কংক্রিট কোড উদাহরণগুলির সাথে একমাত্র সত্তা সিস্টেম আলোচনা।
আমার পুনরাবৃত্তি নিম্নলিখিত হিসাবে গিয়েছিল:
প্রথম পুনরাবৃত্তির একটি "সত্তা সিস্টেম" অবজেক্ট ছিল যা আদমের বর্ণনা অনুসারে ছিল; তবে আমার উপাদানগুলির এখনও পদ্ধতি রয়েছে - আমার 'রেন্ডারযোগ্য' উপাদানটির একটি পেইন্ট () পদ্ধতি ছিল, এবং আমার অবস্থানের উপাদানটির একটি চাল () পদ্ধতি এবং ইত্যাদি ছিল When উপাদানগুলি এবং উপাদান আপডেটগুলি কার্যকর করার ক্রম ক্রম .... খুব অগোছালো mess
সুতরাং, আমি ফিরে গিয়ে টি-মেশিনগুলির ব্লগটি পুনরায় পড়লাম। সেখানে মন্তব্য threads- এবং তাদের মধ্যে তিনি সত্যিই জোর দিয়েছেন যে উপাদান না তথ্য অনেক না behaviours- আচরণে সত্তা সিস্টেম দ্বারা উপলব্ধ করা হয় না। এইভাবে আপনাকে উপাদান এবং অর্ডার উপাদানগুলির আপডেটের মধ্যে বার্তা প্রেরণের দরকার হবে না কারণ ক্রমটি সিস্টেমের প্রয়োগের গ্লোবাল অর্ডার দ্বারা নির্ধারিত হয় । ঠিক আছে. সম্ভবত এটি খুব বিমূর্ত।
যাইহোক পুনরাবৃত্তির জন্য # 2 এটি আমি ব্লগ থেকে সংগ্রহ করেছি:
সত্ত্বা ম্যানেজার - উপাদান "ডাটাবেস" হিসাবে কাজ করে যা নির্দিষ্ট সংস্থার উপাদান রয়েছে এমন সত্তাগুলির জন্য অনুসন্ধান করা যেতে পারে। এটি দ্রুত অ্যাক্সেসের জন্য মেমরির একটি ইন-মেমরির ডেটাবেস দ্বারা সমর্থিতও হতে পারে ... আরও তথ্যের জন্য টি-মেশিনের অংশ 5 দেখুন।
এনটিটিসিস্টেম - প্রতিটি সিস্টেম মূলত কেবলমাত্র একটি পদ্ধতি যা এনটাইটের সেটগুলিতে কাজ করে। প্রতিটি সিস্টেম কাজ করার জন্য কোনও সত্তার x, y এবং z এর উপাদান ব্যবহার করবে। সুতরাং আপনি এক্স, y এবং z উপাদানগুলির সাথে সত্ত্বার জন্য ম্যানেজারকে জিজ্ঞাসা করবেন তারপরে ফলাফলটি সিস্টেমে প্রেরণ করবেন।
সত্তা - লম্বা মত একটি আইডি। সত্তা হ'ল উপাদানগুলির একটি সেটকে একটি সত্তাকে একত্রে ভাগ করে।
উপাদান - ক্ষেত্রের একটি সেট .... কোন আচরণ! যখন আপনি আচরণগুলি যুক্ত করা শুরু করেন এটি অগোছালো হয়ে উঠতে শুরু করে ... এমনকি একটি সাধারণ স্পেস আক্রমণকারী খেলায়।
সম্পাদনা করুন : যাইহোক, 'ডিটি' হ'ল শেষ প্রধান লুপের অনুরোধের পর থেকে ব-দ্বীপের সময়
সুতরাং আমার প্রধান আক্রমণকারী লুপটি হ'ল:
Collection<Entity> entitiesWithGuns = manager.getEntitiesWith(Gun.class);
Collection<Entity> entitiesWithDamagable =
manager.getEntitiesWith(BulletDamagable.class);
Collection<Entity> entitiesWithInvadorDamagable = manager.getEntitiesWith(InvadorDamagable.class);
keyboardShipControllerSystem.update(entitiesWithGuns, dt);
touchInputSystem.update(entitiesWithGuns, dt);
Collection<Entity> entitiesWithInvadorMovement = manager.getEntitiesWith(InvadorMovement.class);
invadorMovementSystem.update(entitiesWithInvadorMovement);
Collection<Entity> entitiesWithVelocity = manager.getEntitiesWith(Velocity.class);
movementSystem.move(entitiesWithVelocity, dt);
gunSystem.update(entitiesWithGuns, System.currentTimeMillis());
Collection<Entity> entitiesWithPositionAndForm = manager.getEntitiesWith(Position.class, Form.class);
collisionSystem.checkCollisions(entitiesWithPositionAndForm);
এটি প্রথমে কিছুটা অদ্ভুত দেখাচ্ছে তবে এটি অবিশ্বাস্যভাবে নমনীয়। এটি অনুকূলকরণ করা খুব সহজ; বিভিন্ন উপাদান উপাদানগুলির জন্য আপনার পুনরুদ্ধার দ্রুত করার জন্য বিভিন্ন ব্যাকিং ডেটাস্টোর থাকতে পারে। 'ফর্ম' শ্রেণির জন্য আপনি সংঘর্ষ শনাক্তকরণের জন্য গতি অ্যাক্সেসের জন্য এটি চতুষ্কোণ দিয়ে সমর্থন করতে পারেন।
আমি তোমাকে পছন্দ করি; আমি একটি পাকা বিকাশকারী কিন্তু গেম লেখার অভিজ্ঞতা নেই। আমি গবেষণায় কিছু সময় ব্যয় করেছি যা বিভিন্ন ধরণের নকশাগুলি দিয়েছিল এবং এটি আমার নজরে পড়ে। কোনওভাবেই এটি করার একমাত্র উপায় নয়, তবে আমি এটি খুব স্বজ্ঞাত এবং দৃust়ভাবে পেয়েছি। আমি বিশ্বাস করি যে "গেম প্রোগ্রামিং রত্ন" সিরিজের 6 টি বইতে এই প্যাটার্নটি আনুষ্ঠানিকভাবে আলোচিত হয়েছিল - http://www.amazon.com/Game-Programming-Gems/dp/1584500492 । আমি নিজে কোনও বই পড়ি না তবে শুনেছি সেগুলি গেম প্রোগ্রামিংয়ের ডি-ফ্যাক্টো রেফারেন্স।