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

فهم سلوكيات التوجيه: قائمة الانتظار

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called Understanding Steering Behaviors.
Understanding Steering Behaviors: Leader Following

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

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

ملاحظة: على الرغم من كتابة هذا البرنامج التعليمي باستخدام AS3 و Flash ، يجب أن تكون قادرًا على استخدام نفس الأساليب والمفاهيم في أي بيئة تطوير ألعاب تقريبًا. يجب أن يكون لديك فهم أساسي لمتجهات الرياضيات.


مقدمة

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

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


بويدس مغادرة الغرفة ويمر عبر المدخل دون سلوك قائمة الانتظار. انقر فوق إظهار القوات.

هذا المشهد تم استخدام سلوك تم وصفه مسبقاً اثنين: التماس وتفادي الاصطدام.

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

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


رؤية المستقبل

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

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


اختبار للجيران باستخدام النقطة المقبلة.

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

المستقبل يتم حساب نقطة كما يلي (pseudo-code):

السرعة ، والتي تعطي أيضًا اتجاه الحرف ، يتم تطبيعها وقياسها بواسطة MAX_QUEUE_AHEAD لإنتاج متجه جديد يسمى qa. عند إضافة qa إلى متجه الموضع ، فإن النتيجة هي نقطة قبل الحرف ، ومسافة مسافة MAX_QUEUE_AHEAD من الوحدات.

كل هذا يمكن أن يتم التفاف في الأسلوب getNeighborAhead():

يتحقق الأسلوب المسافة بين نقطة للأمام وكافة الأحرف الأخرى، إرجاع الحرف الأول الذي على مسافة أقل من أو تساوي MAX_QUEUE_AHEAD. إذا تم العثور على لا حرف، الأسلوب بإرجاع null.


إنشاء طريقة قائمة الانتظار

كما هو الحال مع جميع السلوكيات الأخرى ، the queuing force يتم حسابه بواسطة طريقة تسمى queue ():

نتيجة getNeighborAhead() في تخزينها في متغير الجار. إذا جارتها! = فارغة وهذا يعني أن هناك شخص المقبلة؛ خلاف ذلك، المسار واضح.

يجب أن يعيد queue() ، مثل جميع أساليب السلوك الأخرى ، قوة هي قوة التوجيه المتعلقة بالطريقة نفسها. سوف queue () بإرجاع قوة بدون حجم الآن ، لذلك لن ينتج أي تأثيرات.

طريقة التحديث () لجميع الشخصيات في مشهد المدخل ، حتى الآن ، هي (رمز شبه مزيف):

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


بعض الكلمات حول وقف حركة

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

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

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

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


إيقاف الحركة: "إيقاف الثابت"

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

في التعليمات البرمجية أعلاه، يتم تحجيم ناقل السرعة إلى 30% حجمه الحالي (طول) بينما حرف قدما. نتيجة لذلك، هو حدت بالحركة، ولكن سوف في نهاية المطاف يعود إلى حجمه الطبيعي عندما يتحرك الحرف الذي هو تسد الطريق.

هذا أسهل للفهم من خلال تحليل كيفية حساب حركة تحديث كل:

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

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

النهج "إيقاف الثابت" الذي يعطي النتيجة التالية:


قائمة انتظار السلوك مع نهج"إيقاف الثابت". انقر فوق إظهار القوات.

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


إيقاف الحركة: قوة الفرملة

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

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


تمثيل لقوة الفرامل.

يتلقى قوة الفرامل المكونات سواء في x و y من قوة التوجيه، لكن مقلوب ومع نطاق من 0.8. وهذا يعني أن الفرامل 80% حجم التوجيهي ويشير إلى الاتجاه المعاكس.

تلميح: استخدام القوة التوجيهي مباشرة أمر خطير. إذا كان queue() هو السلوك الأول ليتم تطبيقها على حرف، ستكون قوة التوجيه "فارغة". نتيجة لذلك، يجب استدعاء queue() بعد جميع أساليب التوجيه الأخرى، ذلك لأنه يمكن الوصول إلى القوة التوجيهي الكامل والنهائي.

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

نتيجة لاستخدام القوة الفرامل هو ما يلي:


سلوك قائمة انتظار باستخدام الفرامل قوة النهج. انقر فوق إظهار القوات.

تخفيف تداخل الحروف

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

لإصلاح ذلك، يمكن تعزيز نهج الفرامل مع نسخة معدلة قليلاً من النهج "إيقاف الثابت":

يتم استخدام اختبار جديد للتحقق من الجيران القريبين. هذه المرة بدلاً من استخدام النقطة الأمامية لقياس المسافة ، يتحقق الاختبار الجديد من المسافة بين متجه موضع الحروف:


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

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

يتم تخفيف التداخل عن طريق توسيع متجه السرعة إلى 30٪ من حجمه الحالي لكل تحديث. وكما هو الحال في نهج "التوقف الصارم" ، فإن تقليص ناقل السرعة يقلل بشكل كبير من الحركة.

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


سلوك قائمة الانتظار مع "توقف قاسي" وقوة الفرامل مجتمعة. انقر لإظهار القوات.

إضافة فصل

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

يمكن حل هذا عن طريق إضافة قوة فصل:

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

والنتيجة هي حشد مقنع يحاول الوصول إلى المدخل:


سلوك قائمة الانتظار مع "التوقف الصلب" ، وقوة الفرامل والفصل مجتمعة. انقر لإظهار القوات.

استنتاج

يسمح سلوك الطابور للأحرف بالوقوف في طابور الانتظار بصبر للوصول إلى الوجهة. مرة واحدة في الطابور ، فإن شخصية لا تحاول 'الغش" من خلال القفز على المواقع. سوف يتحرك فقط عندما تتحرك الشخصية أمامه مباشرة.

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

أتمنى أن يعجبك هذا السلوك الجديد وأن تبدأ في استخدامه لإضافة حشود متحركة إلى لعبتك!

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.