সম্পাদনা: আমার প্রশ্নটি ঠিক কী তা স্পষ্ট করে বলার জন্য: বিষয়বস্তু তৈরি / পরিচালনার উপর নজর রেখে কোনও গেম ইঞ্জিনে অ্যানিমেশন / অ্যানিমেশন স্টেটটি হ্যান্ডেল করার কি এটি ভাল উপায়? এইভাবে এটি করার ত্রুটিগুলি কী কী এবং এটি করার বিকল্প উপায় কী হবে? - যদিও আমার উত্তরটি মন্তব্যে আংশিকভাবে উত্তর পেয়েছে, মনে হচ্ছে এটি যাওয়ার উপায়।
আমি 2 ডি গেম ইঞ্জিন শখের প্রকল্পে অ্যানিমেশনগুলিকে হার্ড-কোডিং না করে হ্যান্ডেল করার চেষ্টা করছি । হার্ড কোডিং অ্যানিমেশন রাজ্যগুলি আমার কাছে একটি সাধারণ তবে খুব অদ্ভুত ঘটনা বলে মনে হচ্ছে।
একটি সামান্য ব্যাকগ্রাউন্ড: আমি এমন একটি সত্তা সিস্টেমের সাথে কাজ করছি যেখানে উপাদানগুলি ডেটাগুলির ব্যাগ এবং সেগুলি তাদের উপর কাজ করে subs অ্যানিমেশন স্টেটগুলি আপডেট করার জন্য আমি একটি পোলিং সিস্টেম ব্যবহার করা পছন্দ করেছি।
অ্যানিমেশনটির সাথে আমার অর্থ: "হাঁটা_ বাম", "চলমান_ বাম", "চলার_সামান্য", "শুটিং", ...
অ্যানিমেশনগুলি পরিচালনা করার জন্য আমার ধারণাটি এটিকে ডেটাচালিত মডেল হিসাবে ডিজাইন করা হয়েছিল । ডেটা একটি এক্সএমএল ফাইলে, একটি আরডিবিএম, সংরক্ষণ করা যেতে পারে ... এবং কোনও গেম / স্তর / এর শুরুতে লোড করা যেতে পারে ... ... আপনি যে কোনও জায়গায় কোড পরিবর্তন না করে সহজেই অ্যানিমেশন এবং ট্রানজিশনগুলি সম্পাদনা করতে পারবেন your গেম।
উদাহরণ হিসাবে আমি আমার মনে থাকা ডেটা সংজ্ঞাগুলির একটি এক্সএমএল খসড়া তৈরি করেছি।
ডেটাগুলির একটি খুব গুরুত্বপূর্ণ অংশটি কেবল একটি অ্যানিমেশনের বিবরণ হবে । একটি অ্যানিমেশনের একটি অনন্য আইডি (বর্ণনামূলক নাম) থাকবে। এটি কোনও চিত্রের একটি রেফারেন্স আইডি ধারণ করে (এটি ব্যবহার করে এমন স্প্রাইট শিট, কারণ বিভিন্ন অ্যানিমেশনগুলি বিভিন্ন স্প্রাইট শিট ব্যবহার করতে পারে)। অ্যানিমেশনটি চালাতে প্রতি সেকেন্ডের ফ্রেমগুলি। যদি একটি অ্যানিমেশন একবার বা অসীমভাবে চালানো উচিত তবে এখানে "রিপ্লে" সংজ্ঞা দেয়। তারপরে আমি আয়তক্ষেত্রগুলির একটি তালিকা ফ্রেম হিসাবে সংজ্ঞায়িত করেছি।
<animation id='WIZARD_WALK_LEFT'>
<image id='WIZARD_WALKING' />
<fps>50</fps>
<replay>true</replay>
<frames>
<rectangle>
<x>0</x>
<y>0</y>
<width>45</width>
<height>45</height>
</rectangle>
<rectangle>
<x>45</x>
<y>0</y>
<width>45</width>
<height>45</height>
</rectangle>
</frames>
</animation>
অ্যানিমেশন ডেটা লোড করা হবে এবং একটি অ্যানিমেশন রিসোর্স পুলে অনুষ্ঠিত হবে এবং এটি ব্যবহার করছে এমন গেম সংস্থাগুলি দ্বারা রেফারেন্স করা হবে। এটি একটি চিত্র, শব্দ, একটি জমিন, এর মতো সংস্থান হিসাবে বিবেচিত হবে ...
সংজ্ঞায়িত করার জন্য দ্বিতীয় অংশের ডেটা হ'ল অ্যানিমেশন রাজ্যগুলি এবং ট্রানজিশনগুলি পরিচালনা করতে একটি রাষ্ট্রীয় মেশিন । এটি প্রতিটি রাজ্যকে একটি গেম সত্তা থাকতে পারে তা সংজ্ঞায়িত করে, যা বলে যে এটি রূপান্তর করতে পারে এবং কীভাবে এই রাষ্ট্রের পরিবর্তনের সূত্রপাত হয়।
এই রাষ্ট্র মেশিন সত্তা থেকে সত্তা পৃথক হবে। কারণ একটি পাখির "হাঁটা" এবং "উড়ন্ত" থাকতে পারে যখন একটি মানুষের কেবল "হাঁটা" রাষ্ট্র থাকতে পারে। তবে এটি বিভিন্ন সত্তা দ্বারা ভাগ করা যেতে পারে কারণ একাধিক মানুষের সম্ভবত একই অবস্থা থাকবে (বিশেষত যখন আপনি কিছু সাধারণ এনপিসি যেমন দানব ইত্যাদির সংজ্ঞা দেন)। অতিরিক্তভাবে একটি orc মানুষের মতো একই অবস্থা থাকতে পারে। কেবলমাত্র দেখানোর জন্য যে এই রাজ্যের সংজ্ঞাটি ভাগ করা যেতে পারে তবে কেবলমাত্র গেম সংস্থার একটি নির্বাচিত গোষ্ঠী দ্বারা ।
<state id='IDLE'>
<event trigger='LEFT_DOWN' goto='MOVING_LEFT' />
<event trigger='RIGHT_DOWN' goto='MOVING_RIGHT' />
</state>
<state id='MOVING_LEFT'>
<event trigger='LEFT_UP' goto='IDLE' />
<event trigger='RIGHT_DOWN' goto='MOVING_RIGHT' />
</state>
<state id='MOVING_RIGHT'>
<event trigger='RIGHT_UP' goto='IDLE' />
<event trigger='LEFT_DOWN' goto='MOVING_LEFT' />
</state>
এই রাজ্যগুলি একটি পোলিং সিস্টেম দ্বারা পরিচালিত হতে পারে । প্রতিটি গেম এটি টিক করে এটি একটি গেম সত্তার বর্তমান অবস্থা ধরে এবং সমস্ত ট্রিগার পরীক্ষা করে। কোনও শর্ত পূরণ হলে এটি সত্তার অবস্থাকে "গোটো" অবস্থায় পরিবর্তন করে।
আমি যে শেষ অংশটির সাথে লড়াই করেছিলাম তা হ'ল কীভাবে কোনও সত্তার সাথে অ্যানিমেশন ডেটা এবং অ্যানিমেশন স্টেটগুলিকে আবদ্ধ করা যায় । সর্বাধিক যৌক্তিক দৃষ্টিভঙ্গি আমার কাছে মনে হয়েছিল যে কোনও সত্তা ব্যবহার করে এমন রাষ্ট্রীয় মেশিনের ডেটাতে একটি পয়েন্টার যুক্ত করতে এবং সেই মেশিনে প্রতিটি রাজ্য এটি কী অ্যানিমেশন ব্যবহার করে তা নির্ধারণ করতে।
এখানে অ্যানিমেশনের অবস্থা এবং অ্যানিমেশন ডেটা আইডিকে সম্বোধন করে আমি কোনও গেমের অ্যানিমেশন আচরণ এবং গ্রাফিকাল উপস্থাপনাকে কীভাবে সংজ্ঞায়িত করব তার একটি এক্সএমএল উদাহরণ রয়েছে। লক্ষ্য করুন যে "উইজার্ড" এবং "orc" উভয়েরই একই অ্যানিমেশন স্টেট রয়েছে তবে আলাদা অ্যানিমেশন রয়েছে। এছাড়াও, ভিন্ন অ্যানিমেশনের অর্থ ভিন্ন স্প্রিট শিট, বা অ্যানিমেশনের একটি পৃথক ক্রমও হতে পারে (একটি অ্যানিমেশন দীর্ঘ বা সংক্ষিপ্ত হতে পারে)।
<entity name="wizard">
<state id="IDLE" animation="WIZARD_IDLE" />
<state id="MOVING_LEFT" animation="WIZARD_WALK_LEFT" />
</entity>
<entity name="orc">
<state id="IDLE" animation="ORC_IDLE" />
<state id="MOVING_LEFT" animation="ORC_WALK_LEFT" />
</entity>
সত্তাটি তৈরি করা হলে এটি রাষ্ট্রের মেশিন ডেটা এবং একটি অ্যানিমেশন ডেটা রেফারেন্স সহ রাজ্যের একটি তালিকা যুক্ত করবে।
ভবিষ্যতে আমি সত্ত্বা সিস্টেমটি একই রকম এক্সএমএল ফর্ম্যাটে উপাদানগুলি সংজ্ঞায়িত করে পুরো সত্তা তৈরির জন্য ব্যবহার করব।
-
এটিই আমি কিছু গবেষণার পরে এনেছি। তবে এর চারপাশে মাথা পেতে আমার কিছুটা সমস্যা হয়েছিল, তাই আমি কিছু প্রতিক্রিয়ার আশা করছি। এখানে কি এমন কিছু আছে যা বোঝায় না, বা এই জিনিসগুলি হ্যান্ডেল করার আরও ভাল উপায় আছে? আমি ফ্রেমের মাধ্যমে পুনরাবৃত্তি করার ধারণাটি উপলব্ধি করেছিলাম তবে এটিকে আরও একধাপ এগিয়ে নিয়ে যেতে আমার সমস্যা হচ্ছে এবং এটি করার চেষ্টা এটি আমার।