بسم الله الرحمن الرحيم
اولا ندردش اشويه ونفكر بالالية ايجاد اقرب عدو
في هذا الدرس سيتم شرح طريقة معرفة اقرب عدو
ويتم معرفة اقرب عدو باحتساب المسافة الاصغر بينكم
وهنا نجد ان هنالك نوعين من المسافة
الاول المسافة بالموجب
الثاني المسافة بالسالب
مثلا
فالنفرض انك تقف على محور y وفي نقطة صفر
وكان هنالك عدو الاول على نفس المحور في نقطة 6 سالب
وكان هنالك عدو رقم الثاني على نفس المحور في نقطة 4 موجب
الان نحسب المسافة فنجد ان ::
المسافة بينك وبين العدو الاول = 6 سالب
المسافة بينك وبين العدو الثاني = 4 موجب
بالرغم من ان العدو رقم 1 يبعد عنك 6 وحدات
الا ان المسافة الاصغر هي 6 سالب
وهنا تظهر لنا المشكلة في حساب المسافة
فالحقيقة ان العدو الاقرب هو العدو رقم 2
حيث انه يبعد عنك 4 وحدات
فدائما السالب اصغر من الموجب في الحساب
ولحل هذه المشكلة نقوم بتربيع الارقام فيكون الناتج دوما رقم موجب
ونحسب المسافة الان نعود للمثال السابق ونطبق ونرى النتيجة
الان نحسب المسافة بعد تربيع الارقام فنجد ان ::
المسافة بينك وبين العدو الاول = 6 * 6 = 36 موجب
المسافة بينك وبين العدو الثاني = 4 * 4 = 16 موجب
وبذلك فان العدو الاقرب هو الثاني
وها قد وصلنا للحل
الان من هذا المنطلق ومن هذه الفكرة نقوم بكتابة سكربت لايجاد العدو الاقرب
اولا نتعرف على كيفية عمل التربيع في الجافا سكربت اليونتي
باستخدام كود sqrMagnitude
الان نكتب هذا الكود
وهذا الكود بطريقة اخرى
وبينما انت تشاهد الفرق ساتوقف ونكمل ان شاء الله قريبا
اولا ندردش اشويه ونفكر بالالية ايجاد اقرب عدو
في هذا الدرس سيتم شرح طريقة معرفة اقرب عدو
ويتم معرفة اقرب عدو باحتساب المسافة الاصغر بينكم
وهنا نجد ان هنالك نوعين من المسافة
الاول المسافة بالموجب
الثاني المسافة بالسالب
مثلا
فالنفرض انك تقف على محور y وفي نقطة صفر
وكان هنالك عدو الاول على نفس المحور في نقطة 6 سالب
وكان هنالك عدو رقم الثاني على نفس المحور في نقطة 4 موجب
الان نحسب المسافة فنجد ان ::
المسافة بينك وبين العدو الاول = 6 سالب
المسافة بينك وبين العدو الثاني = 4 موجب
بالرغم من ان العدو رقم 1 يبعد عنك 6 وحدات
الا ان المسافة الاصغر هي 6 سالب
وهنا تظهر لنا المشكلة في حساب المسافة
فالحقيقة ان العدو الاقرب هو العدو رقم 2
حيث انه يبعد عنك 4 وحدات
فدائما السالب اصغر من الموجب في الحساب
ولحل هذه المشكلة نقوم بتربيع الارقام فيكون الناتج دوما رقم موجب
ونحسب المسافة الان نعود للمثال السابق ونطبق ونرى النتيجة
الان نحسب المسافة بعد تربيع الارقام فنجد ان ::
المسافة بينك وبين العدو الاول = 6 * 6 = 36 موجب
المسافة بينك وبين العدو الثاني = 4 * 4 = 16 موجب
وبذلك فان العدو الاقرب هو الثاني
وها قد وصلنا للحل
الان من هذا المنطلق ومن هذه الفكرة نقوم بكتابة سكربت لايجاد العدو الاقرب
اولا نتعرف على كيفية عمل التربيع في الجافا سكربت اليونتي
باستخدام كود sqrMagnitude
الان نكتب هذا الكود
كود PHP:
var ennmyone : Transform;
var dis = (ennmyone.position - transform.position);
var disPositive = dis.sqrMagnitude;
print(disPositive);
وهذا الكود بطريقة اخرى
كود PHP:
var ennmyone : Transform;
var disPositive = (ennmyone.position - transform.position).sqrMagnitude;
print(disPositive);
الان نقوم ببناء السكربت بخطوات منطقية
اولا نكتب سكربت يقوم بالبحث عن جميع الاعداء ويضعهم في مصفوفة
قبل البدء يجب ان نضيف tag باسم Enemy
حتى نستطيع تحديد جميع الاعداء اللذين يحملون هذا tag
بهذا الكود
كود PHP:
var allenemy : GameObject[];
allenemy = GameObject.FindGameObjectsWithTag("Enemy");
ثانيا نقوم بتعريف متغير باسم العدو الاقرب وهو من نوع GameObject
حتى نقوم بوضع العدو الاقرب في داخلة لاستخدامة
بهذا الكود
كود PHP:
var enemyclosest : GameObject;
الان نحصل على بداية الكود على الشكل التالي
كود PHP:
var allenemy : GameObject[];
allenemy = GameObject.FindGameObjectsWithTag("Enemy");
var enemyclosest : GameObject;
ثالثا نقوم بجلب كل عدو... كلن على حدا ونضعه في متغير باسم oneenemy في المصفوف الاعداء allenemy
من خلال دالة loop التي تم شرحها بالدرس بالدرس السابق
بهذا الكود
كود PHP:
for (var oneenemy : GameObject in allenemy )
{
}
الان نقوم بحساب المسافة لكل عدو في مصفوفة allenemy وبيننا
ونقوم بتربيع المسافة للتخلص من القيم السالبه
بهذا الكود
كود PHP:
for (var oneenemy : GameObject in allenemy )
{
var dis = (oneenemy .transform.position - transform.position);
var disPositive = dis .sqrMagnitude;
}
الان بعد ان قمنا باستعراض المسافات بين بين كل عدو في المصفوفة وبيننا
فاننا نحصل على جميع المسافات بيننا وبين العدو وهنااااا
نقوم بوضع شروط معينة لتحديد العدو الاقرب
اولا قبل كل شي سوف نجمع الاكواد السابقة حتى تتوضح لنا هيكلة السكربت
وسنضع امر الطباعىة لكي يطبع جميع المسافات
بهذا الكود
كود PHP:
var allenemy : GameObject[];
allenemy = GameObject.FindGameObjectsWithTag("Enemy");
var enemyclosest : GameObject;
for (var oneenemy : GameObject in allenemy )
{
var dis = (oneenemy .transform.position - transform.position);
var disPositive = dis .sqrMagnitude;
print (disPositive );
}
الان ناتي الي طريقة وفكرة الشرط لتحديد المسافة الاصغر
هنا سوف نضع شرط يكون كالتالي
اذا كانت المسافة العدو الاول في المصفوفة اصغر من المسافة الموجودة
يكون ذلك العدو هو العدو الاقرب
هنا نتسال كيف مسافة العدو الاول في المصفوفة نقارنه بمسافة ماذاا .... فلا يوجد عدو قبله !!!
وهنا نحتاج لمسافة اولية تكون كبييييييره جداااااااااا
وتكون دائمااا وهي المسافة الكبيره وتكون مسافة ..لامتناهيه
Infinity
وهنا فاننا نحتاج الي تعريف مسافة تكون مسافة لامتناهيه Infinity
بهذا الكود
كود PHP:
var distance = Mathf.Infinity;
ونقول اذا كانت المسافة اصغر من المسافة السابقة يتم
تحديد العدو بانه العدو الاقرب
ونقوم ايضا باستبدال المسافة الاقرب التي حصلنا عليها في مكان المسافة السابقه
وهكذا فاننا نضمن ان
لا يتم تفعيل الشرط الا اذا وجدة مسافة عدو جديد تكون اقل من المسافة السابقة
ويكون الكود بهذا الشكل
كود PHP:
if (disPositive < distance)
{
enemyclosest = oneenemy;
distance = disPositive;
}
كود PHP:
var allenemy : GameObject[];
allenemy = GameObject.FindGameObjectsWithTag("Enemy");
var enemyclosest : GameObject;
var distance = Mathf.Infinity;
for (var oneenemy : GameObject in allenemy )
{
var dis = (oneenemy .transform.position - transform.position);
var disPositive = dis .sqrMagnitude;
if (disPositive < distance)
{
enemyclosest = oneenemy;
distance = disPositive;
}
}
print (enemyclosest);
تعليق