মৌলিকভাবে আপনি সঠিক পথে রয়েছেন - আপনাকে জানতে হবে যে এই ধরণের কাজটি করতে অ্যানিমেশনটি কতক্ষণ স্থায়ী হয়। অ্যানিমেশনগুলি কেবল ফ্রেমের সংগ্রহের চেয়েও বেশি কিছু, আপনার চারপাশে অন্যান্য ধরণের অন্যান্য তথ্য রয়েছে যা আপনার প্রয়োজন। উদাহরণস্বরূপ, সেখানে কতগুলি ফ্রেম রয়েছে, অ্যানিমেশন লুপটি কীভাবে তাড়াতাড়ি ফিরে খেলতে পারে (উদাহরণস্বরূপ প্রতি সেকেন্ডে 25 বা 25, বা 60 টি 10 অ্যানিমেশন ফ্রেম?)। প্রতিটি অ্যানিমেশনটি কয়েক টুকরো ডেটা হিসাবে সংজ্ঞায়িত করা যেতে পারে, যা কিছু সাধারণীকরণ অ্যানিমেশন কোডটি আবার দেখে এবং ফিরে খেলতে পারে। আপনার অ্যানিমেশন অংশটি তার নিজস্ব বিটটিতে এনপ্যাপুলেট করা উচিত, যা এই অ্যানিমেশন সংজ্ঞাগুলি ছাড়াও এবং পৃথক চিত্রের ফ্রেমগুলি কীভাবে প্রদর্শন করবেন সে সম্পর্কে কিছুই জানেন না। এটি হ'ল একটি অ্যানিমেশন অবজেক্ট রয়েছে যা আপনি লোড করতে পারেন, খেলতে শুরু করতে পারেন, খেলতে শুরু করতে পারেন এবং স্ক্রিনের কোনও নির্দিষ্ট স্থানে রেন্ডার করতে বলতে পারেন।
একটি নমনীয় পন্থা এই ধরণের তথ্য encapsulate জন্য অ্যানিমেশন সংজ্ঞা একটি ধরণের ব্যবহার করা হয়। সুতরাং "অ্যানিমেশন এক্স এই সমস্ত ফ্রেমগুলির মধ্যে কেবলমাত্র এটির মাধ্যমে খেলুন" না বলার পরিবর্তে আপনি কিছুটা জটিল জটিল পান।
যেমন কোনও ধরণের উপহাসের ডেটা ফর্ম্যাট সহ
অ্যানিমেশন =
{
{নাম = "হাঁটা", ফাইলগুলি = "হাঁটা * .png", ফ্রেমকাউন্ট = "12", লুপ = "সত্য"},
{নাম = "ফায়ার" ফাইল = "ফায়ার * .png" ফ্রেমকাউন্ট = "6",
ইভেন্ট = {
{নাম = "বুলেটলিভসগান", ফ্রেম = "4", প্যারাম 1 = "43", প্যারাম 2 = "30"}
}
}
}
সুতরাং আপনার কোড কিছু বলে:
currentAnimation = animations.Get("fire");
currentAnimation.Play();
আপনি কীভাবে ইভেন্টগুলি সনাক্ত করতে পারেন তা হয় আপনাকে পুনরায় কল করার অ্যানিমেশন কোডের সাথে (যেমন এটি যখন কোনও নতুন ইভেন্ট সনাক্ত করে কারণ অ্যানিমেশনটি একটি নির্দিষ্ট ফ্রেমে খেলেছে, এটি নতুন ইভেন্ট সম্পর্কে এটি বলার জন্য আপনার গেম কোডকে কল করে), অথবা ভোটগ্রহণের মাধ্যমে অ্যানিমেশন যেমন:
List<Event> events = currentAnimation.EventsSinceLastCheck();
foreach (AnimationEvent event in events)
{
if (event.name == "bulletLeavesGun")
{
Vector2 bulletPosition = new Vector2(event.param1, event.param2);
Vector2 actualBulletPosition = new Vector2(
character.x + bulletPosition.x,
character.y + bulletPosition.y);
CreateBulletAt(actualBulletPosition);
}
}
লক্ষ্য করার বিষয়গুলি:
- অ্যানিমেশন কোডটি গেম কোড থেকে আলাদা থাকা উচিত। আপনি আপনার গেমপ্লে কোডটি খুব শক্তভাবে অ্যানিমেশন প্লেব্যাকের বাদাম এবং বল্টের সাথে আবদ্ধ করতে চান না।
- অ্যানিমেশন কোড অ্যানিমেশন সংজ্ঞা উপর ভিত্তি করে লুপ করতে হবে বা না জানে
- অ্যানিমেশন কোডটি অ্যানিমেশনটি কখন সম্পন্ন হবে তা জানে এবং 'আরে, "ফায়ার" নামক অ্যানিমেশনটি সবে শেষ হয়ে গেছে বলে এখনই অন্য কোনও কোডে কল করতে পারে, আপনি এখন কী করতে চান?'
- অ্যানিমেশন কোডটিতে একটি নাম এবং তাদের সাথে যুক্ত কিছু স্বেচ্ছাসেবী তথ্য (প্যারাম 1 এবং প্যারাম 2) ব্যতীত ইভেন্টগুলি সম্পর্কে কিছুই জানে না para
- অ্যানিমেশন কোডটি বর্তমানে এটি কী ফ্রেমে রয়েছে তা জানে এবং যখন এটি একটি নতুন ফ্রেমে পরিবর্তিত হয়, তখন এটি চেক করে বলতে পারে 'ওহ, আমি এখন ফ্রেম 4 এ আছি, এর অর্থ "ফায়ার" নামক এই ইভেন্টটি সবেমাত্র ঘটেছে, এটিকে যুক্ত করুন আমার সাম্প্রতিক ইভেন্টগুলির তালিকা যাতে আমি এ সম্পর্কে যে কেউ জিজ্ঞাসা করতে পারি।
আপনার যদি অ্যানিমেশনের মধ্যে বুলেট ফায়ারিংয়ের প্রয়োজন না হয় তবে কেবল একবার এটি শেষ হয়ে গেলে, আপনি ঘটনাগুলির ধারণাটি ছাড়াই অনেক কম জটিল সিস্টেম নিয়ে পালিয়ে যেতে পারেন। তবে আপনি এখনও এমন একটি সিস্টেম চান যেখানে অ্যানিমেশনগুলি তাদের নিজের মতো করে খেলতে পারে, তারা কতক্ষণ তা জানে এবং অ্যানিমেশনটি শেষ হলে গেম কোডটিতে আবার কল করতে পারে।