Unconfigured Ad Widget

تقليص

إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

درس جافا سكربت معرفة اقرب عدو the closest enemy

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • درس جافا سكربت معرفة اقرب عدو the closest enemy

    بسم الله الرحمن الرحيم

    اولا ندردش اشويه ونفكر بالالية ايجاد اقرب عدو



    في هذا الدرس سيتم شرح طريقة معرفة اقرب عدو


    ويتم معرفة اقرب عدو باحتساب المسافة الاصغر بينكم


    وهنا نجد ان هنالك نوعين من المسافة


    الاول المسافة بالموجب


    الثاني المسافة بالسالب


    مثلا
    فالنفرض انك تقف على محور 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"); 

    اضغط على الصورة لعرض أكبر. 

الإسم:	اضافة التاج enemy.jpg 
مشاهدات:	1 
الحجم:	70.0 كيلوبايت 
الهوية:	3307473


    ثانيا نقوم بتعريف متغير باسم العدو الاقرب وهو من نوع 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); 
    لا اله الا الله واشهد ان محمد رسول الله
    اللهم اني اسألك باسمك الاعظم اللذي اذا دعيت به اجبت ان تنصر المسلمين وجندك على الظالمين
    وتفتك باعدائك اعداء الدين

  • #2
    جمييييل الله يعطيك العافية
    وجعله في ميزان حسناتك
    انا كنت اتسائل عن طريقة عمل ذلك
    وها انت قد شرحته


    ---------------------------------------------------

    كل القلوب الى الحبيبي تميل *** ومعي بهذا شاهد ودليل
    اما الدليل اذا ذكرت محمدا *** صارت دموع العارفين تسيل
    هذا رسول الله نبراس الهدى *** هذا لكل العالمين رسول



    تعليق


    • #3
      اهلين اخي لوفر جيم الله يعافيك مشكور على المرور
      بصراحة حاولت كثر ما اكثر اتدرج بالشرح وانشاله تكون مفهومه
      وتستفيد منها

      وتقبل تحياتي
      لا اله الا الله واشهد ان محمد رسول الله
      اللهم اني اسألك باسمك الاعظم اللذي اذا دعيت به اجبت ان تنصر المسلمين وجندك على الظالمين
      وتفتك باعدائك اعداء الدين

      تعليق


      • #4
        جزاك الله خيرا اخي مبارك على الشرح الممتاز وعلى ما تقدمه من فوائد
        والله عم تبدع هل الايام
        My Channel
        UDK And 3d max tutorial
        Facebook page
        علي الجابر
        لبيك يا اقصانا
        http://up.foraten.net/f/foraten.net_13417550011.swf

        تعليق


        • #5
          شكرا جزيلا على الدرس
          بصراحة اعجبني فكرة الشرط الخير في تحديد الاقرب
          فيها حنكة و ذكاء
          شكرا مجددا
          FaceBook
          Here

          Ask Me
          Here
          My Channel In Youtube
          Here

          ____________________________________________

          لكي تعيش عليك ان تتقن فن التجاهل باحتراف

          تعليق


          • #6
            بس عندي ملاحظة صغيرة :
            يمكنك استخدام Vector3.Distance لحساب المسافة بدون التربيع
            وهكذا يكون اسهل
            FaceBook
            Here

            Ask Me
            Here
            My Channel In Youtube
            Here

            ____________________________________________

            لكي تعيش عليك ان تتقن فن التجاهل باحتراف

            تعليق


            • #7
              شكر اخواني علي وماتركسنس علا الكلام الطيب والمرور
              تحياتي لكم
              لا اله الا الله واشهد ان محمد رسول الله
              اللهم اني اسألك باسمك الاعظم اللذي اذا دعيت به اجبت ان تنصر المسلمين وجندك على الظالمين
              وتفتك باعدائك اعداء الدين

              تعليق


              • #8
                المشاركة الأصلية بواسطة matrixinc مشاهدة المشاركة
                بس عندي ملاحظة صغيرة :
                يمكنك استخدام Vector3.Distance لحساب المسافة بدون التربيع
                وهكذا يكون اسهل

                جرب تطبق Vector3.Distancوشوف النتيجه
                وبانتظار ردك بعد التطبيق
                لا اله الا الله واشهد ان محمد رسول الله
                اللهم اني اسألك باسمك الاعظم اللذي اذا دعيت به اجبت ان تنصر المسلمين وجندك على الظالمين
                وتفتك باعدائك اعداء الدين

                تعليق


                • #9
                  المشاركة الأصلية بواسطة المناهل مشاهدة المشاركة
                  جرب تطبق Vector3.Distancوشوف النتيجه
                  وبانتظار ردك بعد التطبيق
                  قمت بتطبيقها و بالفعل اعطت نفس النتيجة
                  قمت باستبدال
                  كود PHP:
                   var dis = (oneenemy .transform.position transform.position);
                   var 
                  disPositive dis .sqrMagnitude
                  بـ
                  كود PHP:
                  var disPositive Vector3.Distance(transform.position,oneenemy .transform.position); 
                  فصار الكود :
                  كود PHP:
                  var allenemy GameObject[];

                      
                  allenemy GameObject.FindGameObjectsWithTag("Enemy"); 
                      var 
                  enemyclosest GameObject;
                      var 
                  distance Mathf.Infinity;  

                  for (var 
                  oneenemy GameObject in allenemy )
                    {
                   var 
                  disPositive Vector3.Distance(transform.position,oneenemy .transform.position);
                    

                         if (
                  disPositive  distance
                          { 

                              
                  enemyclosest oneenemy

                              
                  distance disPositive

                          }

                    }
                     
                    print (
                  enemyclosest); 
                  FaceBook
                  Here

                  Ask Me
                  Here
                  My Channel In Youtube
                  Here

                  ____________________________________________

                  لكي تعيش عليك ان تتقن فن التجاهل باحتراف

                  تعليق


                  • #10
                    تاكد من ردك ومن الكود الاخير الي وضعته !
                    لم تعدل شي
                    لا اله الا الله واشهد ان محمد رسول الله
                    اللهم اني اسألك باسمك الاعظم اللذي اذا دعيت به اجبت ان تنصر المسلمين وجندك على الظالمين
                    وتفتك باعدائك اعداء الدين

                    تعليق


                    • #11
                      شرح جميل اخ مبارك صرت استاذ وانا ما بعرف ههههههههههههه

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

                      مع العلم دالة ال Vector.Distance(); تعطيك نفس النتيجة
                      -:| My Games |:-
                      AfterEarth Online SOON

                      -:| Contact Us |:-
                      Facebook Page :- NTStudio

                      تعليق


                      • #12
                        المشاركة الأصلية بواسطة المناهل مشاهدة المشاركة
                        تاكد من ردك ومن الكود الاخير الي وضعته !
                        لم تعدل شي
                        اهاااااا اسف جدا
                        بما اني مبرمج سي شارب وانا لم ارد ان اغير في لغة البرمجة كي يفهمها الاخرون
                        فقمت بنسخ الكود و غير عليه
                        ولكن عندما اعدته لم انتبه تماما
                        FaceBook
                        Here

                        Ask Me
                        Here
                        My Channel In Youtube
                        Here

                        ____________________________________________

                        لكي تعيش عليك ان تتقن فن التجاهل باحتراف

                        تعليق


                        • #13
                          شكر اخي نت سوف على التوضيح والكود موجود بالرفرنس اليونتي
                          بخصوص النتيجه اخي matrixinc ستكون واحده لكن
                          انظر الي الناتج من امر الطباعة للتعرف على الارقام الناتجه
                          لا اله الا الله واشهد ان محمد رسول الله
                          اللهم اني اسألك باسمك الاعظم اللذي اذا دعيت به اجبت ان تنصر المسلمين وجندك على الظالمين
                          وتفتك باعدائك اعداء الدين

                          تعليق


                          • #14
                            أصبحت نابغة في النظريات الحسابية

                            ماشاء الله عليك

                            الشرح تمام لا غبار عليك أبد

                            تعليق


                            • #15
                              المشاركة الأصلية بواسطة المناهل مشاهدة المشاركة
                              شكر اخي نت سوف على التوضيح والكود موجود بالرفرنس اليونتي
                              بخصوص النتيجه اخي matrixinc ستكون واحده لكن
                              انظر الي الناتج من امر الطباعة للتعرف على الارقام الناتجه
                              اها اعرف الناتج سيكون مختلف عن الناتج تبع التربيع
                              في هذا الكود القيمة ليست مهمة انما المهم من بعده اكبر و من اصغر
                              لذلك عمل الكود بشكل صحيح
                              FaceBook
                              Here

                              Ask Me
                              Here
                              My Channel In Youtube
                              Here

                              ____________________________________________

                              لكي تعيش عليك ان تتقن فن التجاهل باحتراف

                              تعليق

                              يعمل...
                              X