‫أهلا ومرحبا.
‫في هذه المحاضرة ، سننظر في وجود بعض الخيارات في سلوكياتنا بحيث يمكن أن
‫يكون لدي عدو يركض نحوي وإذا غاب عني ، فإنه يأتي إلى آخر موقع معروف لي ويقوم بسلوكين أساسيين
‫مطاردة ثم بعد ذلك سلوك التحقيق.
‫دعونا نتعمق ونرى كيف يمكن تحقيق ذلك.
‫استخدام أشجار السلوك.
‫لذا في حين أن سلوك الدوريات هذا مفيد للغاية ، إلا أنه في الحقيقة ليس نوع السلوك الذي نريد
‫تنفيذه.
‫ما نفضله هو شيء على غرار ما يلي.
‫عندما نتمكن من رؤية اللاعب ، نذهب ونقترب منه قدر الإمكان.
‫وعندما يخرج اللاعب عن الأنظار ، نحاول الانتقال إلى آخر موقع معروف للاعب للعثور
‫عليهم.
‫وبمجرد استنفاد هذا الخيار ، ربما نعود إلى موقع مختلف ، أو ربما
‫نبقى هناك الآن.
‫فكيف نحقق ذلك؟
‫حسنًا ، في الوقت الحالي ، ليس لدينا طريقة لتحقيق ذلك بسلسلة من الإجراءات.
‫نحتاج إلى الاختيار بناءً على البيانات المتوفرة لدينا.
‫نحتاج إلى الاختيار بين ما إذا كان بإمكاننا رؤية اللاعب أو ما إذا كنا لا نستطيع ، سواء كان لدينا
‫آخر موقع معروف للاعب أم لا ، هذا النوع من الأشياء.
‫للقيام بذلك ، نحتاج إلى نوع جديد من العقدة في شجرة السلوك يسمى عقدة المحدد.
‫لذلك إذا نقرنا بزر الماوس الأيمن وألقينا نظرة على مركباتنا ، فإن أحد الخيارات هو المحدد.
‫الآن المحدد على عكس التسلسل يعمل على هذا النحو.
‫إذا كانت لديك مجموعة من المهام أسفل المحدد ، فسيتم تشغيلها حتى تنجح المهمة الأولى.
‫ومن المتوقع في الأساس أن يفشل كل منهم حتى ينجح أحدهم.
‫الآن التسلسل فعل العكس.
‫يدير كل منهم حتى يفشل واحد منهم.
‫فلماذا هذا مفيد؟
‫لماذا من المفيد أن يقوم المحدد بتشغيل واحد منهم وما زال أحدهم ينجح؟
‫لأننا في الأساس نريده أن يختار الخيار الأول القابل للتطبيق.
‫الآن ، الطريقة التي سنقوم بها لا تتمثل في تشغيل المهام في الواقع أسفل المحدد ، ولكن
‫تشغيل التسلسلات أسفل المحدد.
‫لذلك على مستوى الجذر ، سنقوم بعمل عقدة محددة.
‫وبعد ذلك ، دعنا نحرك هذا التسلسل جانبًا وننشئ متواليات أخرى.
‫سيكون لدينا تسلسل واحد هنا ، وما يمكننا فعله هو أنه يمكننا في الواقع
‫إعادة تسمية التسلسل من التسلسل إلى شيء مثل تشيس ، ومن ثم يمكننا إضافة تسلسل آخر هنا ،
‫والذي سيكون على طول الخطوط من التحقيق.
‫وهذان هما في الأساس سلوكان نريد أن نكون قادرين على الاختيار بينهما.
‫ومن أجل جعلها تفشل ، يمكننا إضافة أشياء إلى العقد تسمى الديكور.
‫لذلك إذا نقرت بزر الماوس الأيمن على عقدة وذهبت لإضافة مصمم ، يمكنك أن ترى هنا مجموعة
‫من الخيارات هنا وهي تغير طريقة عمل هذه العقدة بشكل أساسي.
‫ثم يمكنهم فعل ذلك بعدة طرق.
‫على سبيل المثال ، لدينا هذه الحلقة الشرطية التي تسمح لك بالمرور عبر جميع الإجراءات مرة
‫أخرى في التسلسل عدة مرات حيث يكون هذا الشرط صحيحًا.
‫لدينا أشياء أخرى هنا ، مثل الفحص المخروطي ، والذي يتعلق بالرؤية وأشياء أخرى جميلة من هذا القبيل.
‫لقد حصلنا فقط على حلقة نقية.
‫لدينا حد زمني ، لذلك يمكننا فقط البقاء داخل هذا التسلسل لفترة زمنية
‫معينة.
‫في الأساس الكثير من الأشياء التي تعدل سلوك هذا التسلسل.
‫لكن الشيء الذي نهتم به هو السبورة ، لأن هذه حالة سبورة.
‫وكما ترون من الكتابة الموجودة تحتها ، فإن الافتراضي هو شيء على غرار هل تم
‫تعيين هذا الممثل الذاتي؟
‫وإذا لم يتم تعيين هذا ، فستفشل هذه العقدة تلقائيًا وكل شيء تحتها ، مما يعني أن مُحدِّدنا
‫سينتقل إلى الخيار الثاني ، وهو التحقيق.
‫لذا في هذه الحالة ، نريد تغيير ذلك.
‫نريد تغيير طريقة عمل هذا.
‫لذا فإن موقع لاعبنا ، نريد أن يكون هذا بحيث يتم ضبطه فقط عندما يكون اللاعب مرئيًا.
‫ثم نريد إضافة متغير جديد هنا مرة أخرى ، سيكون المتجه الذي سيكون آخر موقع معروف للاعب
‫وآخر موقع معروف للاعب عندما يكون اللاعب مرئيًا سيكون هو نفسه.
‫ولكن بمجرد أن يصبح اللاعب غير مرئي ، لا يتم ضبط موقع اللاعب ويكون آخر موقع معروف للاعب هو المكان
‫الذي نريد الذهاب إليه.
‫لذلك يمكننا القيام بذلك عن طريق الانتقال إلى حالة قاعدة Blackboard الخاصة بنا وتغييرها فقط
‫إلى أن يكون الاستعلام ليكون نعم ، ولكن الشيء الذي نريد تعيينه هو موقع المشغل.
‫لذلك إذا تم تعيين موقع اللاعب ، فسنمنح Chase وسنمنح Chase من خلال القيام
‫ببساطة بنقل إلى مكان اللاعب وسننتقل إلى موقع اللاعب مثل.
‫لذا فنحن الآن لا نقوم بالكثير من الأمور الأخرى في ظل هذا التسلسل.
‫لذلك في الواقع ، يمكنك وضع حالة السبورة هذه مباشرة أثناء التنقل أيضًا ، ولكن نظرًا لأننا قد نرغب في القيام
‫بأشياء أخرى مثل التصوير ، سأتركها كسلسلة في الوقت الحالي.
‫ومن ثم لدينا هذا التحقيق.
‫يقوم التحقيق أيضًا بشكل أساسي بإجراء حركة أيضًا ، ولكنه سينتقل إلى
‫موقع المشغل الأخير بدلاً من الانتقال إلى موقع اللاعب.
‫ويمكنك أن ترى أننا لا نملك شرطًا بشأن ذلك لأن هذا يحدث إذا فشلت هذه الحالة.
‫أحد الأشياء المهمة التي يجب ملاحظتها حول شروط السبورة هذه هو أنه بشكل افتراضي
‫، بمجرد أن نتخذ قرار بدء تنفيذ هذه العقدة ، لن نعيد تقييم ذلك.
‫لذلك إذا فقدنا رؤية اللاعب لسبب ما أثناء انتقالنا إلى موقع ذلك اللاعب ، فسنستمر
‫في محاولة الوصول إلى هناك.
‫لذا ، إذا أردنا أن تكون قادرة على إحباط تنفيذ هذه العقدة ، فهناك خيار لذلك.
‫إذا ذهبت إلى التحكم في التدفق ، فهناك مراقبون تم إخطارهم ويوجد تحتها.
‫إحباط المراقب في الوقت الحالي إلى لا شيء.
‫ولكن يمكنك الاختيار من بين عدة خيارات.
‫يمكنك ضبطه على الذات.
‫هذا يعني أنه إذا أصبحت هذه الحالة خاطئة فجأة ، فتوقف عما تفعله وأعد تقييم المحدد
‫الخاص بك وانظر.
‫ربما نحتاج الآن إلى إجراء التحقيق.
‫ملاحظة الخيار الآخر هنا ذو أولوية أقل ويمكنك أن ترى أنه تم تغيير ما تم تمييزه هنا.
‫إنه يقول إذا أصبحت حالة السبورة هذه صحيحة فجأة ، توقف عن أي شيء آخر كنا نفعله وابدأ
‫في تنفيذ شرط المطاردة هذا.
‫ثم الخيار الأخير هو كلاهما.
‫وهذا هو الذي نريده.
‫في الأساس ، تقول أن هذا الشرط القائم على السبورة ، إذا أصبح صحيحًا ، نبدأ في تنفيذ هذا
‫التسلسل على الفور.
‫إذا أصبح خطأ ، نتوقف عن تنفيذه على الفور أو نتوقف عن تنفيذ أي شيء آخر يحدث.
‫نريد فقط أن نذهب دائمًا ونفعل أي مسار تمليه حالة السبورة هذه.
‫لذلك نأمل أن يكون من المنطقي أن يقوم المراقب بإجهاض الأشياء في العمل ، وإلا فإنه
‫سينتظر حتى ينتهي الإجراء قبل إعادة التقييم.
‫لذلك حقًا ، نريد الآن المضي قدمًا وتنفيذ آخر موقع لعب معروف وموقع لاعب ، لأنه في الوقت
‫الحالي ، إذا انتقلنا إلى C ++ وأعطينا مساحة أكبر قليلاً ، فيمكنك أن ترى أننا
‫فقط تحديد موقع هذا اللاعب في بدء اللعب.
‫من الناحية المثالية ، سنفعل هذا في كل مرة يكون لدينا فيها خط رؤية لبيدق لاعبنا ، لذلك يمكننا في الواقع
‫إلغاء تعليق رمز خط الرؤية لدينا هنا.
‫وربما نريد إلغاء التعليق على كود else أيضًا.
‫لكننا في هذه الحالة لن نزيل التركيز ونوقف الحركة بشكل مباشر.
‫يمكنني المضي قدمًا وإزالتها تمامًا لأن.
‫هذه ليست الطريقة التي نؤدي بها الأشياء في الوقت الحالي.
‫بدلاً من ذلك ، ما نريد القيام به ، إذا قمت بإزالة الرمز ، هو أننا نريد أن نكون هنا لتحديد موقع
‫اللاعب.
‫نريد أيضًا تعيين آخر موقع معروف هناك وفي أماكن أخرى نريد مسح موقع المشغل.
‫الآن للقيام بذلك ، لدينا وظيفة متاحة لنا وهي بدلاً من القيمة المحددة كمتجه ،
‫إذا تقدمنا وفتحنا مكون السبورة لدينا ، فهناك قيمة واضحة وهذا يأخذ اسم f فقط ، لا يحتاج لأخذ نوع
‫أو أي شيء أو لأننا نقوم بمسح كل ما كان موجودًا في هذا المتغير
‫تمامًا.
‫لذا لدي هنا التحدي بالنسبة لك لملء مجموعة القراد الخاصة بنا.
‫المتغيرين عند خط الرؤية ، يملأ الجزء الأول من عبارة if بشكل أساسي ثم يمسح
‫موقع المشغل عندما يكون لدينا البديل.
‫لذلك عندما نفقد خط البصر ، لم يعد لدينا موقع لاعب بعد الآن.
‫قلل من سرعة العدو الموجود في العالم حتى تتمكن من الابتعاد عنه بسهولة أكبر.
‫ثم تحقق من الوظيفة ، وتحقق من قدرتك على الاختباء خلف زاوية وأنه ينتقل إلى آخر موقع
‫معروف لمحاولة العثور عليك.
‫أوقف الفيديو مؤقتًا وجرب هذا.
‫تمام.
‫مرحبًا بعودتك.
‫لذلك دعونا نجرب هذا.
‫بادئ ذي بدء ، نحن نحدد موقع اللعب.
‫سأقوم بنقل ذلك من بدء اللعب ونقله هنا بدلاً من ذلك.
‫لذلك سنقوم بتعيين موقع اللاعب على أننا نحتاج إلى الحصول على اللاعب بيدق هنا ووضع علامة مرة أخرى.
‫لذلك سأقوم بإلغاء التعليق على هذا السطر ثم نقوم بعمل نفس الشيء بالضبط ، نفس سطر الكود بالضبط
‫لموقع آخر لاعب معروف لدينا هنا.
‫لذلك دعنا نذهب إلى السبورة ونتأكد فقط من نسخها حتى نحصل على نفس الاسم
‫تمامًا ثم نريد فقط توضيح أن آخر شيء هو مسح موقع لاعبنا هنا.
‫لذلك ستكون قيمة واضحة وستأخذ موقع مشغل النص هذا على أنه القيمة التي نحاول
‫توضيحها في النهاية.
‫ويمكننا المضي قدمًا والتجميع ومعرفة ما إذا كان هذا يعمل.
‫حسنًا ، كان التجميع ناجحًا.
‫الشيء الآخر الذي قلته لفعله لتسهيل تصحيح الأخطاء هو اختيار
‫العدو ويمكننا تغيير سرعته من خلال النزول إلى مكون حركته والعثور على المشي وإيجاد سرعته.
‫لذا فإن سرعة Max Walk هي 600 هنا.
‫فلنقم بتخفيضها إلى 400 حتى نتمكن من الابتعاد عنها بسهولة.
‫سوف يمشون ببطء بعض الشيء ويمضون قدمًا ويلعبون.
‫إنهم يسيرون نحونا ببطء.
‫يمكننا الهرب.
‫نختبئ وراء ركن وها هم يأتون بحثًا عنا في كل مرة.
‫لكن نأمل إذا اختبأنا خلف زاويتين ، فلن يتمكنوا من العثور علينا.
‫لذا أختبئ هناك ، أختبئ هنا ، أختبئ هنا.
‫وسيقوم بالتحقيق في آخر موقع معروف ، كما ترى ، لقد طعن رأسه
‫في الزاوية ، لكنه بعد ذلك عالق هناك لأنه لا يعرف ماذا يفعل.
‫وإذا أردنا أن نذهب ونلقي نظرة على شجرة سلوكنا وقمنا بوضع هذا في جانب واللعبة على الجانب
‫الآخر ومنح نفسي مساحة صغيرة.
‫ثم إذا ألقينا نظرة على شجرة السلوك ، يمكننا أن نرى أنها نوع من الجاز هنا لأنها
‫لا تستطيع فعل أي منهما.
‫إنها تحاول الانتقال إلى آخر موقع معروف نجح.
‫لذا فقد أصبح عالقًا بعض الشيء هنا.
‫لكن إذا رأيت ، يمكنك أن ترى أنه يتحرك نحوي.
‫إذا غاب عني ، يتوجه إلى حالة التحقيق.
‫حتى تفقد البصر.
‫سوف يقوم بالتحقيق.
‫ثم يأتي ويراني ثم يعود لمطاردتي.
‫إذن هذا السلوك يعمل بالفعل.
‫نحن الآن قادرون على الاختيار بين محاولة المطاردة ومحاولة التحقيق بناءً على سلوك السبورة
‫هذا.
‫دعنا فقط نغير اسم السبورة إلى السلوك هنا لرؤية علامة استفهام للاعب.
‫لذلك سيكون هذا أسهل في القراءة.
‫الآن لدينا هذا المحدد يمكنه رؤية اللاعب ، ثم يجب علينا المطاردة ، وإلا يجب
‫علينا التحقيق ويمكننا حذف هذا التسلسل هنا لأن ذلك لم يعد قيد الاستخدام.
‫لذلك نأمل الآن أن يكون لديك فهم أفضل لكيفية ربط أشجار السلوك معًا لإنشاء الاختيار
‫والتسلسل ووضع الكثير من المهام معًا لجعل السلوكيات الأكثر تعقيدًا بسهولة حقًا.
‫في المحاضرة التالية ، سننظر في كيفية إنشاء مهام مخصصة خاصة بنا في C ++ حتى نتمكن من الحصول
‫على بعض إجراءات التصوير.
‫سأراك في الفيديو التالي.