Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. Programming

بنية البيانات قائمة العمل: حسن لواجهة المستخدم، ومنظمة العفو الدولية، والرسوم المتحركة، وأكثر

by
Difficulty:IntermediateLength:LongLanguages:

Arabic (العربية/عربي) translation by Aeni Amalia (you can also view the original English article)

قائمة الإجراءات بنية بيانات بسيطة مفيدة للعديد من المهام المختلفة داخل محرك لعبة. يمكن القول بأنه ينبغي دائماً أن تستخدم قائمة الإجراءات بدلاً من بعض أشكال جهاز الدولة.

الشكل الأكثر شيوعا (وأبسط شكل) من تنظيم السلوك هو آلة الدولة المحدودة. عادة ما يتم تنفيذها مع مفاتيح أو صفائف في C أو C ++ ، أو درجات من إذا كانت تصريحات أخرى في اللغات الأخرى ، فإن آلات الحالة جامدة وغير مرنة. قائمة الإجراءات هي خطة تنظيمية أقوى من حيث أنها تصف بطريقة واضحة كيف تحدث الأشياء في الواقع. لهذا السبب ، تكون قائمة الإجراءات أكثر سهولة ومرونة من جهاز الحالة المحدد.


لمحة سريعة

قائمة الإجراءات مجرد مخطط منظمة لمفهوم عمل فواصل. إجراءات مخزنة في لأول مرة في ترتيب أولاً (fifo). هذا يعني أنه عندما يتم إدخال إجراء في قائمة الإجراءات ، فإن الإجراء الأخير الذي تم إدخاله في المقدمة سيكون الإجراء الأول المطلوب إزالته. لا تتبع قائمة الإجراءات تنسيق FIFO بشكل صريح ، ولكنها تبقى في جوهرها كما هي.

يتم تحديث كل حلقة اللعبة، قائمة الإجراءات وكل عمل في القائمة يتم تحديثها في النظام. بمجرد الانتهاء من إجراء ما، يتم إزالته من القائمة.

الإجراء هو نوع من الوظائف التي يمكن الاتصال بها والتي تقوم ببعض الأعمال بطريقة ما. في ما يلي بعض الأنواع المختلفة من المناطق والعمل الذي يمكن أن تؤديه الإجراءات داخلها:

  • واجهة المستخدم: عرض تسلسلات قصيرة مثل "الإنجازات" ، تشغيل سلاسل من الرسوم المتحركة ، التقليب عبر النوافذ ، عرض محتوى ديناميكي: تحريك ؛ استدارة؛ يواجه؛ تتلاشى. التينينج العام.
  • الذكاء الاصطناعي: السلوك المدرج في قائمة الانتظار انتظر؛ دورية؛ الفرار. هجوم.
  • منطق الرتبة أو السلوك: نقل منصات؛ حركات عقبة؛ تحويل مستويات.
  • الرسوم المتحركة / الصوت: تشغيل؛ توقف.

انخفاض مستوى أشياء مثل لا تمثيل مسار إيجاد أو يتدفقون بفعالية مع قائمة عمل. القتال وغيرها من المجالات المتخصصة للغاية الخاصة باللعبة اللعب هي أيضا الأشياء التي واحدة ربما لا ينبغي أن تنفذ عبر قائمة عمل.


فئة قائمة العمل

وإليك نظرة سريعة على ما يجب وضعه داخل بنية بيانات قائمة الإجراءات. يرجى ملاحظة أن المزيد من التفاصيل المحددة ستتبع لاحقًا في المقالة.

من المهم ملاحظة أن التخزين الفعلي لكل إجراء لا يجب أن يكون قائمة مرتبطة فعلية - شيء مثل C ++ std :: vector سيعمل بشكل جيد تمامًا. التفضيل الخاص بي هو تجميع كافة الإجراءات داخل قوائم مخصصة وقوائم ارتباط مع القوائم المرتبطة intrusively. عادةً ما يتم استخدام قوائم الإجراءات في المناطق الأقل حساسية للأداء ، لذا من المحتمل أن يكون التحسين المعتمد على البيانات غير ضروري عند تطوير بنية بيانات قائمة الإجراء.


الإجراء

جوهر هذا كله shebang هي الإجراءات نفسها. يجب أن يكون كل إجراء قائمًا بذاته تمامًا بحيث لا تعرف قائمة الإجراءات نفسها شيئًا عن الأجزاء الداخلية للإجراء. هذا يجعل قائمة الإجراءات أداة مرنة للغاية. لن تهتم قائمة الإجراءات بما إذا كانت تقوم بتشغيل إجراءات واجهة المستخدم أو إدارة حركات نموذج ثلاثي الأبعاد.

طريقة جيدة لتنفيذ الإجراءات هي من خلال واجهة مجردة واحدة. يتم عرض عدد قليل من الوظائف المحددة من كائن التصرف إلى قائمة الإجراءات. في ما يلي مثال لما قد يبدو عليه الإجراء الأساسي:

الدالات OnStart () و OnEnd () مكملة هنا. يتم تنفيذ هاتين الدالتين عندما يتم إدراج إجراء في قائمة ، وعند انتهاء الإجراء ، على التوالي. تسمح هذه الوظائف بأن تكون الأعمال مستقلة تمامًا.

حظر وعدم حظر الإجراءات

من الإضافات الهامة لقائمة الإجراءات هي القدرة على الإشارة إلى الإجراءات إما على أنها حظر أو عدم حظر. التمييز بسيط: يؤدي إجراء المنع إلى إنهاء روتين تحديث قائمة الإجراء ولم يتم تحديث أي إجراءات أخرى ؛ يسمح الإجراء غير المحظور بتحديث الإجراء اللاحق.

يمكن استخدام قيمة Boolean واحدة لتحديد ما إذا كان هناك إجراء يتم حظره أو عدم حظره. في ما يلي بعض psuedocode الذي يوضح روتين تحديث قائمة الإجراء:

وسيكون مثالاً جيدا لاستخدام الإجراءات غير مؤمن للسماح لبعض السلوكيات لكل تشغيل في نفس الوقت. على سبيل المثال، إذا كان لدينا قائمة انتظار الإجراءات لتشغيل والتلويح بالأيدي، طابع تنفيذ هذه الإجراءات يجب أن تكون قادرة على القيام على حد سواء في وقت واحد. إذا كان يشغل عدو من الحرف سيكون من أبله جداً إذا اضطر إلى تشغيل، ثم وقف وموجه يديها بشكل محموم، ثم تبقى على التوالي.

كما اتضح ، يتطابق مفهوم حظر وإجراءات المنع بشكل حدسي مع معظم أنواع السلوكيات البسيطة المطلوب تنفيذها في اللعبة.


مثال حالة

دعنا نغطي مثالاً لما يمكن أن تبدو عليه قائمة الإجراءات في سيناريو العالم الحقيقي. سيساعد هذا على تطوير الحدس حول كيفية استخدام قائمة الإجراءات ، ولماذا تكون قوائم الإجراءات مفيدة.

المشكلة

يحتاج العدو في لعبة ثنائية الأبعاد من أعلى إلى أسفل إلى الدوران ذهابًا وإيابًا. عندما يكون هذا العدو في نطاق المشغل يحتاج إلى إلقاء قنبلة باتجاه اللاعب ، وإيقاف دورته. يجب أن يكون هناك تهدئة صغيرة بعد القاء القنبلة حيث يقف العدو تماما. إذا كان اللاعب لا يزال في نطاق ينبغي ألقيت قنبلة أخرى تليها تباطوء. إذا كان اللاعب خارج النطاق، ينبغي أن تستمر الدورية بالضبط حيث أنه ترك إيقاف.

ينبغي أن تطفو من خلال العالم 2D كل قنبلة والتقيد بقوانين الفيزياء المستندة إلى بلاط نفذت داخل اللعبة. قنبلة فقط ينتظر حتى ينتهي توقيت الصمامات، وضربات ثم يصل. ينبغي أن يتألف الانفجار للرسوم متحركة وصوت، وإزالة مربع الاصطدام القنابل والعفريت البصرية.

سيكون إنشاء جهاز الدولة لهذا السلوك أمرًا ممكنًا وليس صعبًا ، ولكن الأمر سيستغرق بعض الوقت. يجب أن تكون الترميزات من كل ولاية مشفرة يدويًا ، وأن حفظ الحالات السابقة لمواصلة العمل لاحقًا قد يتسبب في حدوث صداع.

حل قائمة الإجراءات

لحسن الحظ ، هذه مشكلة مثالية لحلها مع قوائم الإجراءات. أولاً ، دعونا نتصور قائمة إجراءات فارغة. ستقدم قائمة الإجراءات الفارغة هذه قائمة بالعناصر "المطلوب تنفيذها" للعدو لإكمالها ؛ تشير القائمة الفارغة إلى عدو غير نشط.

من المهم التفكير في كيفية "تجزئة" السلوك المطلوب في دنفر قليلاً. أول شيء سيكون للحصول على انخفاض السلوكيات دورية. دعنا نفترض العدو ينبغي أن دورية لليسار بمسافة، ثم دورية لليمين بنفس المسافة، وكرر.

هنا ما الدورية بترك العمل قد تبدو مثل:

سوف تبدو PatrolRight متطابقة تقريبًا ، مع انقلبت الاتجاهات. عندما يتم وضع واحدة من هذه الإجراءات في قائمة الإجراءات للعدو ، فإن العدو سوف يقوم بدوريات في اليمين واليسار بلا حدود.

هنا هو رسم تخطيطي قصيرة لإظهار تدفق قائمة العمل، مع أربع لقطات لدولة قائمة الإجراءات الحالية للقيام بدوريات:

ActionListPatrol2

إضافة القادم ينبغي أن يكون الكشف عن عندما يكون اللاعب قريب. يمكن القيام بهذا عمل غير مؤمن لا مع كامل من أي وقت مضى. هذا الإجراء أن تحقق لمعرفة ما إذا كان اللاعب بالقرب من العدو، وإذا كان الأمر كذلك سيتم إنشاء إجراء جديد يسمى ثرووبومب مباشرة أمام نفسه في قائمة الإجراءات. فإنه سيتم أيضا وضع إجراء تأخير الحق بعد عمل ثرووبومب.

سيعمل إجراء عدم المنع هناك ويتم تحديثه ، ولكن قائمة الإجراءات ستستمر في تحديث جميع الإجراءات اللاحقة التي تتجاوزها. سيتم تحديث إجراءات المنع (مثل Patrol) وستتوقف قائمة الإجراءات لتحديث أي إجراءات لاحقة. تذكر أن هذا الإجراء موجود هنا فقط لمعرفة ما إذا كان اللاعب في النطاق ، ولن يترك قائمة الإجراءات مطلقًا!

هنا ما قد يبدو هذا الإجراء:

سوف يكون إجراء ThrowBomb بمثابة عمل مانع لإلقاء قنبلة على اللاعب. ربما ينبغي أن يتبعه ThrowBombAnimation ، الذي يحجب ويعرض رسومًا متحركة للعدو ، ولكني تركت ذلك لإيجازه. وقفه وراء القنبلة سوف تجري للرسوم المتحركة، والانتظار قليلاً قبل الانتهاء.

دعونا نلقي نظرة على رسم تخطيطي لما قائمة بهذا العمل قد تبدو أثناء تحديث:

Blue circles are blocking actions. White circles are non-blocking actions.
تمنع دوائر زرقاء الإجراءات. دوائر بيضاء غير مؤمن الإجراءات.

يجب أن تكون القنبلة نفسها عبارة عن لعبة جديدة تمامًا ، ولديها ثلاثة إجراءات أو أكثر في قائمة الإجراءات الخاصة بها. الإجراء الأول هو حظر إيقاف مؤقت الإجراء. وعقب هذا ينبغي إجراء لتشغيل الرسوم متحركة لانفجار. شبح القنبلة نفسها، جنبا إلى جنب مع مربع التصادم، ستحتاج إلى إزالتها. وأخيراً، ينبغي أن تكون لعبت تأثير صوت انفجار.

في كل شيء ، يجب أن يكون هناك حوالي ستة إلى عشرة أنواع مختلفة من الإجراءات التي يتم استخدامها معًا من أجل بناء السلوك المطلوب. أفضل جزء في هذه الإجراءات هو أنه يمكن إعادة استخدامها في سلوك أي نوع من أنواع العدو ، وليس فقط ما هو موضح هنا.


مزيد من الإجراءات على

عمل الممرات

كل قائمة العمل في شكله الحالي بممر واحد التي يمكن أن توجد فيها الإجراءات. لين تسلسل من الإجراءات ليتم تحديثه. لين يمكن أما حظر أو عدم حظر.

تنفيذ مثالي من الممرات يجعل من استخدام bitmasks. (للحصول على تفاصيل حول شكل القناع ، يرجى الاطلاع على طريقة سريعة لموضوع "الكاشف" للمبرمجين وصفحة Wikipedia للحصول على مقدمة سريعة.) باستخدام رقم صحيح واحد 32 بت ، يمكن إنشاء 32 حارة مختلفة.

يجب أن يكون إجراء عدد صحيح لتمثيل جميع الممرات المختلفة الموجودة لدى. وهذا يسمح ل 32 ممرات مختلفة تمثل فئات مختلفة من الإجراءات. يمكن حظر كل مسار أو عدم حظره خلال روتين التحديث الخاص بالقائمة نفسها.

في ما يلي مثال سريع على طريقة "التحديث" في قائمة الإجراءات باستخدام ممرات البتل:

يوفر هذا مستوى زيادة المرونة، كما الآن قائمة عمل يمكن تشغيل 32 أنواع مختلفة من الإجراءات، حيث سيكون مسبقاً 32 عمل مختلف القوائم المطلوبة لتحقيق نفس الشيء.

تأخير العمل

إجراء الذي لا يفعل شيئا سوى تأخير جميع الإجراءات لفترة محددة من الوقت أمر مفيد جداً أن يكون. والفكرة لتأخير جميع الإجراءات اللاحقة من أخذ مكان حتى انقضاء جهاز ضبط وقت.

تنفيذ الإجراء تأخير بسيط جداً:

مزامنة العمل

نوع مفيد من العمل واحد الذي يمنع حتى يتم الإجراء الأول في القائمة. وهذا مفيد عندما يتم تشغيلها بضعة إجراءات مختلفة غير مؤمن، ولكن كنت غير متأكد من ما هو أمر سوف تنتهي في. عمل مزامنة يضمن أن أي إجراءات سابقة غير مؤمن حاليا قبل المتابعة.

يتم تنفيذ عمل مزامنة بسيطة كما قد يتصور المرء:


ميزات متقدمة

قائمة الإجراءات الموصوفة حتى الآن أداة قوية بدلاً من ذلك. ومع ذلك هناك زوجين من الإضافات التي يمكن جعل حقاً واسمحوا تلميع من القائمة إجراء. هذه قليلاً من متقدمة ولا أوصى بتنفيذها إلا إذا كان يمكنك القيام بذلك دون الكثير من المتاعب.

المراسلة

القدرة على إرسال رسالة مباشرة إلى إجراء ما ، أو السماح بإجراء لإرسال رسائل إلى إجراءات وأشياء لعبة أخرى ، مفيدة للغاية. وهذا يسمح للإجراءات أن تكون مرنة بشكل غير عادي. غالباً ما يمكن قائمة عمل من هذه النوعية بمثابة "لغة برمجة رجل الفقير".

يمكن أن تتضمن بعض الرسائل المفيدة جدًا للنشر من أي إجراء ما يلي: started؛ العضوية؛ توقفت. المستأنفة؛ منجز؛ ألغيت؛ المحظورة. العنصر المحظور مثير للاهتمام تمامًا - عندما يتم وضع إجراء جديد في قائمة ، قد يؤدي إلى حظر الإجراءات الأخرى. ستحتاج هذه الإجراءات الأخرى إلى معرفة ذلك ، وربما السماح للمشتركين الآخرين بمعرفة الحدث أيضًا.

تفاصيل التنفيذ للمراسلة لغة معينة وإنما غير تافهة. على هذا النحو، تفاصيل التنفيذ لن تناقش هنا، كالرسائل وليس التركيز في هذه المقالة.

إجراءات هيكلية

هناك عدة طرق مختلفة لتمثيل التسلسل الهرمي للإجراءات. إحدى الطرق هي السماح لقائمة الإجراءات نفسها أن تكون إجراءً ضمن قائمة إجراءات أخرى. يتيح ذلك إنشاء قوائم الإجراءات لتجميع مجموعات كبيرة من الإجراءات ضمن معرف واحد. هذا يزيد من سهولة الاستخدام ويجعل قائمة الإجراءات الأكثر تعقيدًا أسهل في التطوير والتصحيح.

أسلوب آخر هو أن تكون الإجراءات هدفها الوحيد أن تفرخ إجراءات أخرى قبل نفسها ضمن قائمة الإجراءات المالك. وأنا شخصيا يفضل هذا الأسلوب المذكورة أعلاه، على الرغم من أنه قد يكون قليلاً أكثر صعوبة لتنفيذ.


الاستنتاج

تمت مناقشة مفهوم قائمة الإجراءات وتنفيذها بالتفصيل من أجل توفير بديل لأجهزة الحالة المخصصة الصارمة. توفر قائمة الإجراءات وسيلة بسيطة ومرنة لتطوير مجموعة واسعة من السلوكيات الديناميكية بسرعة. قائمة الإجراءات هي بنية بيانات مثالية لبرمجة الألعاب بشكل عام.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.