পটভূমি
আমি শখ হিসাবে গেম ডেভলপমেন্ট করি এবং সেগুলি ডিজাইনের আরও ভাল উপায় খুঁজছি। বর্তমানে, আমি একটি স্ট্যান্ডার্ড ওওপি পন্থা ব্যবহার করছি (আমি 8 বছর ধরে এন্টারপ্রাইজ বিকাশ করছি তাই এটি আসবে)। উদাহরণস্বরূপ একটি "বাজে" নিন
public class Baddie:AnimatedSprite //(or StaticSprite if needed, which inherit Sprite)
{
//sprite base will have things like what texture to use,
//what the current position is, the base Update/Draw/GetInput methods, etc..
//an AnimatedSprite contains helpers to animated the player while
//a StaticSprite is just one that will draw whatever texture is there
}
সমস্যাটি
বলি যে আমি একটি 2 ডি প্ল্যাটফর্মার তৈরি করছি, এবং লাফ দিতে সক্ষম হওয়ার জন্য ব্যাডির প্রয়োজন need সাধারণত আমি যা করি তা হ'ল আপডেট / গেটইনপুট পদ্ধতিগুলিতে উপযুক্ত কোড যুক্ত করা। তারপরে যদি আমার প্লেয়ারটিকে ক্রল, হাঁস, আরোহণ ইত্যাদি করা দরকার হয় ... কোড সেখানে যাবে।
যদি আমি সাবধান না হন তবে এই পদ্ধতিগুলি বিশৃঙ্খলাবদ্ধ হয়ে যায়, তাই আমি এই জাতীয় পদ্ধতিগুলির জোড়া তৈরি করে শেষ করি
CheckForJumpAction(Input input)
এবং DoJump()
CheckforDuckAction(Input input)
এবং DoDuck()
সুতরাং গেটইনপুটের মত দেখাচ্ছে
public void DoInput(Input input)
{
CheckForJumpAction(input);
CheckForDuckAction(input);
}
এবং আপডেট মত দেখাচ্ছে
public void Update()
{
DoJump();
DoDuck();
}
যদি আমি গিয়ে অন্য একটি গেম তৈরি করি যেখানে প্লেয়ারকে লাফিয়ে হাঁসের দরকার হয় তবে আমি সাধারণত একটি গেমের মধ্যে যাই যা কার্যকারিতা রয়েছে এবং এটি অনুলিপি করে। অগোছালো, আমি জানি। আমি কেন আরও ভাল কিছু খুঁজছি ts
সমাধান?
আমি সত্যিই পছন্দ করি যে ব্লেন্ডের আচরণগুলি কীভাবে আমি একটি উপাদানের সাথে সংযুক্ত করতে পারি। আমি আমার গেমগুলিতে একই ধারণাটি ব্যবহার করার বিষয়ে ভাবছিলাম। সুতরাং একই উদাহরণ তাকান।
আমি একটি বেস বিহেভিয়ার অবজেক্ট তৈরি করব
public class Behavior
{
public void Update()
Public void GetInput()
}
এবং আমি এটি ব্যবহার করে আচরণ তৈরি করতে পারি। JumpBehavior:Behavior
এবংDuckBehavior:Behavior
তারপরে আমি স্প্রাইট বেসে আচরণের সংকলন যুক্ত করতে এবং প্রতিটি সত্তায় আমার যা প্রয়োজন তা যুক্ত করতে পারি।
public class Baddie:AnimatedSprite
{
public Baddie()
{
this.behaviors = new Behavior[2];
this.behaviors[0] = new JumpBehavior();
//etc...
}
public void Update()
{
//behaviors.update
}
public GetInput()
{
//behaviors.getinput
}
}
তাই এখন যদি আমি অনেক গেমগুলিতে জাম্প এবং হাঁস ব্যবহার করতে চাইতাম তবে আমি কেবল আচরণগুলি আনতে পারি। এমনকি সাধারণদের জন্য আমি একটি লাইব্রেরি তৈরি করতে পারতাম।
এটা কি কাজ করে?
আমি কী বুঝতে পারি না তা হল কীভাবে তাদের মধ্যে রাষ্ট্র ভাগ করা যায়। ঝাঁপ দাও এবং হাঁসের দিকে তাকানো, উভয়ই কেবল টেক্সচারের বর্তমান অংশটি আঁকছে না, তবে প্লেয়ারের অবস্থাকেও প্রভাবিত করে। (জাম্প সময়ের সাথে সাথে wardর্ধ্বমুখী শক্তির একটি হ্রাসমান পরিমাণ প্রয়োগ করতে চলেছে, যখন হাঁসটি কেবল চলাচল বন্ধ করতে চলেছে, টেক্সচারটি এবং ব্যাডির সংঘর্ষের আকারটি পরিবর্তন করবে)।
এটি কীভাবে একসাথে বেঁধে রাখতে পারি তাই এটি কাজ করে? আমি আচরণের মধ্যে নির্ভরতা বৈশিষ্ট্য তৈরি করা উচিত? আমার প্রতিটি আচরণের পিতামাতার সম্পর্কে জানার এবং এটি সরাসরি সংশোধন করা উচিত? আমার মনে হয়েছিল যে একটি জিনিস ট্রিগার হওয়ার সাথে সাথে মৃত্যুদণ্ড কার্যকর করার জন্য প্রতিটি আচরণে একটি প্রতিনিধিকে পাস করতে সক্ষম হয়েছিল able
আমি নিশ্চিত যে আরও কিছু সমস্যা আমি লক্ষ্য করছি are তবে পুরো উদ্দেশ্যটি হ'ল গেমস এবং একই গেমের সত্তার মধ্যে এই আচরণগুলি সহজেই পুনরায় ব্যবহার করতে সক্ষম হওয়া আমার পক্ষে purpose
তাই আমি এটি আপনার কাছে ফিরিয়ে দিই। কীভাবে / যদি এটি করা যায় তা ব্যাখ্যা করার জন্য যত্নশীল? আপনি একটি ভাল ধারণা আছে? আমি উত্কর্ণ.