‫أهلا ومرحبا.
‫في هذه المحاضرة ، سنقدم شيئًا جديدًا في شجرة السلوك ، الخدمات.
‫سنكتشف ما هي الخدمات وكيف تساعدنا في سلوك التشغيل المستمر وكيف يمكننا
‫كتابة خدماتنا في C ++.
‫دعنا نتعمق في الأمر.
‫الآن ، لم يتبق سوى عدد قليل من الأجزاء المنطقية في وحدة التحكم في الذكاء الاصطناعي لدينا والتي ليست في شجرة سلوكنا.
‫واحد من هؤلاء هو تحديد موقع البداية.
‫هذا ما زلت أرغب في تعيينه هنا من وحدة التحكم.
‫لكن أشياء مثل القراد الآن أود أن أفعلها من داخل شجرة سلوكنا.
‫ماذا اريد ان افعل هنا؟
‫كيف أحصل عليه؟
‫قم بتعيين موقع اللاعب لدينا لتحديث آخر موقع معروف للاعب.
‫كلاهما يمكننا القيام به بشيء يسمى خدمة المخطط.
‫لذا دعنا ننتقل إلى المخططات الخاصة بنا ونرى ما يحدث.
‫لذلك إذا ذهبت إلى الذكاء الاصطناعي الخاص بي وفتحت شجرة السلوك ، وقمت بإرسائها في النافذة الرئيسية ، فأنا بحاجة إلى أن أوضح لك
‫ما هي الخدمة.
‫لم نستخدم واحدة من قبل ، وهي في الأساس طريقة لتشغيل شيء ما في كل مرة أو في كثير
‫من الأحيان كلما كان هناك مسار معين نشطًا.
‫لذلك إذا كان لدي خدمة هنا بشأن سلوك Chase ، فسيكون هناك شيء ما سيكون قادرًا على تشغيله طوال الوقت الذي يكون فيه سلوك Chase
‫نشطًا ، سواء كنا نتحرك ، أو نطلق النار ، أو نرجح أيًا من هذه الأشياء
‫، فسيكون دائمًا ادارة.
‫ولكن إذا كنا في التحقيق فلن يكون الأمر كذلك.
‫لذلك هذا هو بالضبط نوع الموقف الذي نتطلع إليه لاستخدام الخدمة.
‫الآن دعونا نحصل على مثال للخدمة.
‫أحد الأشياء التي نلاحظها عندما نلعب هو أنه بمجرد دخول الذكاء الاصطناعي في نطاقنا ونحن
‫نتحرك ، فإنه لا يدور للنظر إلينا ويمكننا إصلاح ذلك من خلال خدمة مدمجة بالفعل هنا.
‫لذلك إذا نقرنا بزر الماوس الأيمن على هذه العقدة وانتقلنا لإضافة خدمة والبحث عن خدمة التركيز الافتراضية ، يمكنك أن ترى أنها
‫بلون مختلف ، إنها خضراء.
‫وإذا حددنا تلك الخدمة الافتراضية ، فإنها أيضًا تقع أسفل عقد التسلسل هذه بدلاً من فوقها
‫، وهو ما يفعله المصممون.
‫لذلك مع تحديد التركيز الافتراضي ، يمكنك بعد ذلك اختيار ما تريد التركيز عليه.
‫وفي هذه الحالة ، نريد التركيز على موقع اللاعب ، والمضي قدمًا والضغط على "حفظ" والضغط على "تشغيل".
‫والآن إذا ذهبنا وألقينا نظرة وتحركنا ، يمكنك أن ترى أنه يدور لمتابعتنا.
‫أشياء رائعة.
‫نريد الآن أن نكون قادرين على تنفيذ خدمة مماثلة في C ++ من شأنها تحديث موقع لاعبنا
‫طوال الوقت وتحديث آخر موقع معروف لدينا للاعب أثناء مطاردتنا.
‫لذلك سنقوم بذلك كخدمتين منفصلتين ويمكنك أن ترى كيف يمكن أن تجعل الخدمات تلقائيًا الأشياء
‫أكثر فاعلية قليلاً من القيام بذلك في وضع علامة لأنه يمكنك فقط تشغيل آخر موقع معروف للاعب
‫عندما تكون في الجزء الأيمن من شجرة السلوك.
‫لذلك دعنا ننتقل إلى وضع الحماية ، وننتقل إلى متصفح المحتوى ، ونضيف فئة C ++ جديدة جديدة ، وسنعرض جميع
‫الفئات ونبحث عن خياراتنا هنا.
‫نحن نبحث عن خدمة BT ومن ثم هناك خياران مثلما كان لدينا مع مهمة BT الخاصة بنا ، فلدينا قاعدة Blackboard
‫وسنريد بالفعل قاعدة Blackboard لأننا نريد أن نعرف أي مفتاح
‫يجب أن يتم التحديث.
‫على سبيل المثال ، هل يجب أن يكون موقع اللاعب؟
‫هل يجب أن يكون آخر موقع لاعب معروف؟
‫لذلك سنذهب ونضرب التالي في هذا مع تحديد Blackboard Base وسنطلق
‫على خدمة BT هذه ، وتسطير أسفل موقع المشغل مثل ذلك والمضي قدمًا وإنشاء هذا الفصل.
‫لذلك بمجرد الانتهاء من التجميع ، سننتقل إلى رمز Visual Studio ويمكنك أن ترى أننا
‫حصلنا على موقع مشغل خدمة BT هذا الذي يرث من خدمة Blackboard Base Call.
‫هذا ما أردناه.
‫الآن ما هي الوظيفة التي سننتقل إليها؟
‫حسنًا ، سأحاول نقل أبسط وظيفة ممكنة ، وهي فقط لتعيين قيمة
‫آخر موقع معروف للاعب.
‫على الرغم من أنه سيتم تكوين هذا المفتاح في شجرة السلوك ، وليس هنا في نص عادي ، إلا أنه سيحصل
‫على موقع المشغل وتعيينه على مفتاح السبورة.
‫ولن يتم إجراء أي من أسباب التحقق من خط البصر إذا كنا نقوم بتشغيله في شجرة
‫سلوكنا فقط عندما نطارد ، فلن نحتاج إلى فحص خط البصر.
‫يمكننا أن نرى اللاعب الذي نعرف أن هذا هو الحال تلقائيًا.
‫لذلك هناك تبسيط آخر للقيام بذلك في الخدمة.
‫لذلك يجب أن يكون هذا واضحًا إلى حد ما إذا عرفنا كيفية الحصول على استدعاء طريقة هنا في خدمة BT.
‫لذلك دعنا نذهب ونلقي نظرة على خدمة BT الخاصة بنا لمعرفة ما هو متاح هناك.
‫ما هو التوثيق ، ماذا يمكننا أن نفعل؟
‫الطرق الرئيسية التي يمكنك رؤيتها هنا أصبحت ذات صلة بـ C ذات الصلة بعقدة التجزئة وعند بدء البحث.
‫عند بدء البحث.
‫نحن لسنا مهتمين بشكل خاص بعقدة التجزئة.
‫نعم ، هذا هو المكان الذي سنحصل فيه على تحديث طوال الوقت بأن هذه الخدمة في مسار نشط.
‫هذا هو الوقت الذي نرغب فيه في التنفيذ.
‫نذهب ونبحث في هذا الملف للعثور على التوقيع الكامل هنا.
‫يمكننا رؤيتها هنا.
‫دعنا نرى ، ما هو القسم الموجود فيه؟
‫إنه تحت القسم المحمي.
‫لذلك سنذهب إلى خدمة BT التي أنشأناها وننشئ قسمًا محميًا.
‫ولصقها ، يتم تلقائيًا تجاوز هنا لأن BT Service كانت ترثها من فئة الوالدين ، لكن
‫لا ضرر في تجاوزها مرة أخرى بأنفسنا.
‫يمكننا إجراء تحول تحكم P لإنشاء التنفيذ ثم نريد الاتصال بـ super.
‫لذلك نحن نريد عقدة علامة التجزئة الفائقة ونريد المرور في شركاتنا الخاصة وذاكرة العقدة الخاصة بنا.
‫ودعنا نرى ، هناك بعض الأشياء الأخرى هنا.
‫لدينا دلتا ثانية بالإضافة إلى ما نحتاج إلى تفويته أيضًا وننتهي في النهاية بالفاصلة
‫المنقوطة يجب أن ننهي تنفيذ عقدة التجزئة.
‫الآن هنا نريد أساسًا القيام بهذا السلوك من وحدة التحكم I CP ، التي نحصل فيها على
‫مكون السبورة ، ثم تعيين قيمة كمتجه.
‫حسنًا ، نحن نعرف كيفية الحصول على مكونات السبورة من مراجع مكونات المالك.
‫هذا واضح ومباشر.
‫سنقوم فقط بعمل نقطة للمالك ثم سنقوم بمكوّن الحصول على السبورة مع تذكر أننا
‫نحتاج إلى تجزئة تضمين هنا لمكون السبورة المائلة للأمام لشجرة السلوك.
‫ثم يمكننا استخدام عامل السهم الخاص بنا.
‫وما يجب أن نكون قادرين على فعله هنا هو فقط تعيين القيمة كمتجه ثم نحتاج إلى مفتاح.
‫حسنًا ، نحن نعرف كيف نتعامل مع هذا ، لكن دعنا نعيد تنشيط ذاكرتنا.
‫إذا انتقلنا إلى خدمة BT الخاصة بنا ، يمكنك رؤية Blackboard Base ، يمكنك رؤية نفس المهمة ، فلدينا
‫مفتاح السبورة المحدد.
‫هذا ما سنستخدمه.
‫الحصول على مفتاح Blackboard المحدد يحصل على المفتاح الذي تم تحديده في شجرة السلوك ثم نريد قيمة المتجه
‫الخاصة بنا.
‫من أين نحن ذاهبون للحصول على ذلك؟
‫سنقوم بالضبط بنفس وحدة تحكم الذكاء الاصطناعي.
‫سنحصل على اللاعب - أولاً وقبل كل شيء هنا في القمة.
‫ثم نحتاج إلى التحقق مما إذا كان هذا فارغًا أم لا ونحتاج أيضًا إلى تضمين إحصائيات اللعب الخاصة بنا.
‫لذلك دعونا نتأكد من أن لدينا إحصائيات اللعب التي تتضمنها وحدة التحكم CP المضمنة في موقع مشغل
‫خدمة اللاعب.
‫ثم سنفعله ، وإذا كان بيدق اللاعب يساوي مؤشر فارغ ، فإن ما نريد فعله هو العودة مبكرًا
‫مرة أخرى هنا ، فإنه يعيد الفراغ حتى نتمكن من القيام بإرجاع مبكر سريع.
‫ثم يمكننا استخدام بيدق لاعبنا هنا للحصول على موقع الممثل ببساطة وقد نحتاج إلى تضمينه هنا.
‫سنرى كيف نذهب.
‫حسنًا ، لا يضر أن تكون آمنًا ، ويفعل ذلك ، وأن تكون صريحًا بشأن هذه الأشياء.
‫لذلك سنقوم بتضمين إطار اللعبة ثم شرطة مائلة للأمام.
‫سيتم رهنها على H حتى نتمكن من التأكد من أننا حصلنا على كل شيء بالترتيب هنا وبعد ذلك
‫نقوم فقط بتعيين القيمة كمتجه.
‫يجب أن يكون هذا كل ما نحتاجه.
‫دعنا نذهب ونجمع ونرى ما إذا كان هذا يعمل.
‫في الحقيقة ، شيء آخر.
‫ربما نريد اسمًا جميلًا جميلًا ، لذلك يجب أن يكون لدينا مُنشئ هنا.
‫لذلك سأقوم بإنشاء قسم عام مع المُنشئ ، والذي سيكون اسم الفصل
‫، ثم نبدأ وننشئ هذا التطبيق.
‫سأقوم بإبراز تطبيقي فوق تطبيق عقدة التجزئة ومن ثم سنقوم
‫بتعيين اسم العقدة على قدم المساواة مع أنه يجب تحديث موقع المشغل ودعنا نبني ونرى ما إذا كان ذلك يعمل.
‫يبدو أنه كان لدي فاصلة منقوطة مفقودة.
‫لنحاول ذلك مرة أخرى.
‫بمجرد تجميع ذلك بنجاح ، يمكننا الانتقال إلى عدونا.
‫بالإضافة إلى التركيز على الإعداد ، أرغب في إضافة خدمة جديدة نعرضها هنا كموقع
‫للاعب حيث يظهر الاسم الجميل بشكل أساسي كموقع تحديث للاعب.
‫يمكنك أن ترى أنه يريد أن يخبرك بتكرار التكتكة كل 0. 4 إلى 0. 6 ثوان.
‫هذا أفضل من استخدام التجزئة لأننا نعلم أن التجزئة تعمل على كل إطار هنا.
‫هذا يتم تشغيله بشكل أقل تكرارًا ، وهو أمر جيد.
‫ويمكننا الانتقال إلى التفاصيل وإنشاء مفتاح السبورة ، والقائمة المنسدلة وتحديد
‫ما نريد تحديثه ليس فقط موقع اللاعب ولكن آخر موقع معروف للاعب ، لأن ذلك سيحدث في كل إطار
‫طالما أننا نطارد وهذا هو السلوك الذي نريده.
‫لذا ، فإن عقدة خدمة أخرى نريد المضي قدمًا وإنشائها ستفعل سلوك وحدة التحكم في الذكاء الاصطناعي من أجل
‫النزول إلى وضع علامة ومعرفة ما تبقى.
‫بالنسبة إلينا هنا هو تحديث موقع اللاعب بشرط ما إذا كان لدينا خط نظر أم لا.
‫لذلك نريده تحديث موقع المشغل.
‫إذا كان لدينا خط رؤية ، فقم بإلغاء تحديد الموقع إذا لم يكن لدينا.
‫لذلك ستكون عقدة خدمة جديدة لأنها سلوك مختلف قليلاً.
‫سنقوم بإضافة فئة C ++ جديدة.
‫سنقوم بإظهار جميع الفئات ومرة أخرى ، سنقوم بخدمة BT ، وتأكيد قواعد
‫السبورة السفلية ، والفئة الأساسية لدينا ، وسنطلق عليها Beat Service Underscore.
‫موقع اللاعب إذا شوهد.
‫وانطلق وقم بإنشاء هذا الفصل.
‫ولأن هذه هي كل الأشياء التي رأيتها في الغالب من قبل ، فسيكون تنفيذ هذه الخدمة هو التحدي
‫الذي تواجهه.
‫لذلك ستنفذ عقدة التشنج اللاإرادي باستخدام الكود الموجود في وحدة تحكم الذكاء الاصطناعي.
‫كدليل لك ، ستحتاج إلى الحصول على مؤشر تحكم AI من داخل خدمة BT.
‫الآن هذا هو نفسه تمامًا كما فعلنا في مهمة BT ، لذا استخدم ذلك كدليل للحصول على مؤشر تحكم
‫الذكاء الاصطناعي.
‫ستحتاج إلى مؤشر تحكم AI للتحقق من خط الرؤية.
‫تذكر أن خط الرؤية هو طريقة في وحدة تحكم الذكاء الاصطناعي ومن ثم تحتاج إلى تحديث أو مسح المفتاح
‫اعتمادًا على فحص خط الرؤية الخاص بك ثم وضع هذه العقدة في شجرة السلوك.
‫في رأيك ، أين سيكون المستوى الصحيح لشجرة السلوك لتشغيل هذه الخدمة؟
‫كيف ستفكر في ذلك؟
‫كان لديك القليل من خدش الذقن ، أوقف مقطع فيديو واذهب.
‫تمام.
‫مرحبًا بعودتك.
‫لقد فتح هذا خدمة تجميل جديدة في كود Visual Studio.
‫الآن سيكون الأمر متطابقًا إلى حد كبير في الرأس ، لذلك سأقوم بنسخ ذلك في رأسنا
‫الذي تم إنشاؤه حديثًا ، والاستثناء هو أننا نحتاج إلى تغيير اسم المنشئ للمطابقة.
‫سنقوم الآن بإنشاء تطبيق للمنشئ ومنحه اسم عقدة لتحديث موقع المشغل إذا تمت
‫رؤيته وإضافة فاصلة منقوطة في النهاية هنا.
‫دعونا لا ننسى ذلك هذه المرة.
‫ثم عد إلى C ++ ، سأقوم بتنفيذ عقدة التجزئة أيضًا وسأقوم فقط بالنسخ عبر
‫إذا وجدنا أنفسنا موقع اللاعب.
‫CP وسيقوم فقط بالنسخ عبر المكالمة إلى super والحصول على بيدق اللاعب والتحقق من الإرجاع
‫الفارغ.
‫في الواقع ، سأقوم بنسخ الجسم بالكامل وسنقوم بتعديله من هناك.
‫لذا بنسخ ذلك عبر وسنقوم أيضًا بنسخ الوصول إلى مكون السبورة مع تضمين مكون السبورة
‫وإحصائيات اللعب والبيدق ، لأننا نحتاج إلى الوصول إلى كل هؤلاء.
‫في الواقع ، يتم مشاركة الكثير من الوظائف هنا.
‫يمكنك التفكير في جعلهم يشاركون هذا الرمز بطريقة ما ، لكنني أعتقد أنه لا يوجد الكثير من الازدواجية التي
‫نهتم بها بدرجة كافية.
‫لذا ما علينا القيام به هنا هو أيضًا التحقق من أن لدينا جهاز تحكم بالعين.
‫لذا سأفعل إذا كان مكون المالك أو مالك نقطة الحصول على I owner يساوي مؤشر فارغ ، فسنريد المضي
‫قدمًا والعودة في هذه المرحلة.
‫ثم الشيء التالي الذي نريد القيام به هو التحقق من رؤيتنا.
‫لذلك سنقوم بعمل إذا حصل المالك على مالك ومن ثم سنقوم بعمل سهم هنا ونحتاج إلى تضمين وحدة
‫التحكم الخاصة بنا هنا.
‫لذلك سيكون هناك تجزئة تشمل.
‫وبعد ذلك سأكون أنا المتحكم في H.
‫ثم نريد عمل خط ودعنا نرى ما هو الاستخدام الصحيح هنا.
‫إذا انتقلنا إلى وحدة التحكم I CP ، فإن خط الرؤية الثاني هو ما نريده.
‫إذن خط الرؤية رقم 2 نحتاج إلى عمل خط رؤية للاعب بيدق.
‫في هذه الحالة ، هل لدينا خط نظر للاعب بيدق؟
‫هل هذا ما نفعله في CP؟
‫دعنا فقط نتحقق من ذلك مرة أخرى.
‫نعم نحن.
‫ثم نرغب في المضي قدمًا وتعيين القيم بشكل مختلف.
‫لذلك نحن نضع قيمة المتجه للاعب البيدق للحصول على موقع الممثل.
‫نعم ، هذا إذا كان لدينا خط نظر آخر.
‫إذا لم يكن لدينا خط نظر ، فنحن نعلم أننا بحاجة إلى توضيح هذه القيمة.
‫لذلك سنستمر في الحصول على مكون المالك ، الحصول على مكون السبورة.
‫ثم ستكون قيمة واضحة وسنقوم بمسح قيمة مفتاح السبورة المحدد
‫، وهذا يجب أن يغطينا إلى حد كبير لتنفيذ موقع المشغل.
‫إذا تمت رؤيته ، فلنذهب ونجمع ونرى ما إذا كان يعمل بشكل جيد.
‫نجح التجميع.
‫دعنا ندخل إلى شجرة السلوك.
‫الآن المستوى الذي أريد أن يعمل عنده هو بشكل أساسي في المستوى الأعلى في المحدد الأولي ، لأنني أريده
‫أن يقوم بتحديث موقع المشغل بشكل أساسي طوال الوقت لأننا نحتاج إلى أن نكون قادرين على إجهاض أي من
‫هذه السلوكيات الأخرى بناءً على يتم تعيين موقع اللاعب.
‫لذلك نحن بحاجة إلى أن نكون قادرين على عدم ضبطه في أي وقت.
‫لذلك سأذهب وانقر بزر الماوس الأيمن على محدد المستوى العلوي ، وأضف خدمة ، وأضف موقع التشغيل
‫إذا رأيت.
‫وبعد ذلك سنحتاج إلى تحديد عقدة الخدمة تلك وتحديد مفتاح السبورة السوداء الخاص بها
‫، والذي سيكون موقع لاعبنا.
‫بحيث يتم تعيين واحد في موقع المشغل ، موقع المشغل المحدث ، وكلما كان الشخص الأكثر غباءًا
‫يقوم بتحديث آخر موقع معروف للاعب.
‫ويجب أن نكون الآن قادرين على النزول إلى وحدة التحكم في الذكاء الاصطناعي الخاصة بنا وإزالة كل هذا الرمز
‫بشكل أساسي في TTIC لأنه تم استبداله بخدماتنا بدلاً من ذلك.
‫ويمكننا المضي قدمًا والتجميع ومعرفة ما إذا كان ذلك يعمل.
‫دعنا ننتقل إلى المحرر ونلعب ونرى ما إذا كان لا يزال لدينا عدو لنا.
‫إنه قادم يركض إلينا ، ويفقد البصر ، ثم يعود إلينا ، ويبدأ في إطلاق النار.
‫نعم.
‫كل شيء يعمل بشكل أساسي كما كان يفعل من قبل ، إلا أنه الآن يفعل ذلك بالكامل عبر الخدمات
‫التي كتبناها لأنفسنا في C ++.
‫في المحاضرة التالية ، سنصلح هذا الخطأ المزعج حيث يواصل الذكاء الاصطناعي إطلاق النار
‫، وفي النهاية يتمكن من قتل نفسه.
‫سأراك هناك.