Unconfigured Ad Widget

تقليص

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

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

(درس Unity 3D) عمل شاشة تحميل قبل بدأ اللعبة أو المرحلة

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

  • (درس Unity 3D) عمل شاشة تحميل قبل بدأ اللعبة أو المرحلة

    (درس)..Unity 3D
    عمل شاشة تحميل قبل بدأ اللعبة أو المرحلة
    “الجزء الأول"


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

الإسم:	Untitled-2.gif 
مشاهدات:	1 
الحجم:	31.1 كيلوبايت 
الهوية:	3306137

    السلام عليكم ورحمة الله وبركاته

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

    1- الأساس :-

    وهو الكود الذي ترتكز عليه كل الطرق وهو :
    كود:
    [LEFT][B]private var loading_time = 12.0;[/B]
    [B]function Update () {[/B]
    [B]if (Time.time > loading_time) {[/B]
    [B]Application.Loadlevel (n);[/B]
    [B]}
    }[/B][/LEFT]
    يعمل الكود كالتالي أولا

    كود:
    [B]private var loading_time = 12.0;[/B]
    هنا نقوم بتعريف متغير عددي يخزن في ذاكرة البرنامج وقيمته 12.0 وسوف يكون هو الوقت الذي تبقى فيه شاشة التحميل قبل الإنتقال للعبة أو المرحلة وهنا أنا حددتها على أنها 12 ثانية
    ثانيا نعرف أو نستدعي إذا صح التعبير الدالة Update تقوم هـذه الدالة بعمل الأمر الذي بداخلها في كل فريم من فريمات اللعبة ثم كتبت بداخلها الأمر التالي :
    كود:
    [LEFT][B]if (Time.time > loading_time) {[/B]
    [B]Application.Loadlevel (n);[/B]
    [B]}[/B]
    [/LEFT]
    ملاحظة مهمة : لاتنسى كتابة كل حرف كما هو فالجافا سكريبت لغة حساسة لحالة الأحرف

    طيب الآن لنفصل الكود في الأول أنا قمت بكتابةif وهي للدلالة على كتابة جملة شرطية ويكتب الشرط بين قوسين بعدها () ويكتب جواب الشرط بين {} ولاتنسى كتابة ; بعد الإنتهاء من كتابة جواب الشرط طيب أوكي الآن بعد كتابة ال if نقوم بكتابة الشرط وهو (Time.time > loading_time) لنفصله الآن في الأول قمنا بالإشتراط على البرنامج أنه في حال كان الوقت بالثواني أكبر من قيمة المتغير loading_time وذالك بكتابة Time.time وذالك لإحتساب الوقت بالثواني ثم loading_time < وذالك لمقارنته بــ المتغير تبعنا الي كتبنا فيه عدد الثواني قبل إختفاء نافذة جاري التحميل أي loading_time وهل هو أكبر من المتغير –أي الوقت (عدد الثواني)- أو لا بعد كتابة كل ذالك صار الكود لدينا هكذا
    كود:
    [LEFT][B]private var  loading_time = 12.0;[/B]
    [B]function Update () {
    [/B][B]if (Time.time > loading_time
    [/B][B])[/B]
    [/LEFT]
    طيب الآن بعد كل هذا هل البرنامج سوف يقارن ويكشف أن الوقت صار أكبر بعد تخطيه حاجز ال12.0 ثانية وأنتهينا طبعا لا لأنه حتى الآن لايوجد جواب للشرط أي ما سيفعله البرنامج إذا زاد الوقت عن 12.0 ثانية لذالك قلت لك أنه يجب وضع الفعل أو جواب الشرط بين {} بعد الشرط وهنا في المثال أنا كتبت جواب الشرط
    كود:
    [B]{[/B]
    [B]Application.Loadlevel (n);[/B]
    [B]}[/B]
    وكالمرة السابقة هيا بنا نفصل الكود وهو كالتالي في الأول كتبنا طبعا {} ثم كتبنا بداخلهاApplication.Loadlevel (n);ومعناها أولا هنا تم توجيه الأمر للبرنامج مباشرة- وليس لمجسم في مرحلة أو ماشابه- عن طريق الأمر Application وأعتقد أنه ممكن يفهم أنه معني بالبرنامج من إسمه المهم تم توجيه هذا الأمر أي بالعربية ممكن نقول (يا برنامج) ثم يأتي الفعل وهو ما سيفعله البرنامج وهو كالتالي .Loadelevel(n); ويعني (حمل المرحلة
    -يكتب رقم المرحلة بين القوسين-(n) وحرف الn هنا يعني رقم المرحلة)
    ملاحظة : من الممكن كتابة إسم المرحلة أيضا بدلا من حرف الn إن أردت وأنتبه على حالة الأحرف .
    وفي نهاية جواب الشرط نكتب; للدلالة على نهاية الجواب وهي تكتب في نهاية كل كود ثم نغلقه ب } ثم نكتب مرة أخرى } لإغلاق دالة الUpdate لأن الأكواد في الدوال تكتب بين {} أيضا.
    الآن إنتهينا من الكود وصار لدينا الكود كالتالي:
    كود:
     
    [B]private var  loading_time = 12.0;[/B]
    [B]function Update () {[/B]
    [B]if (Time.time > loading_time) {[/B]
    [B]Application.Loadlevel (n);[/B]
    [B]}[/B]
    [B]}[/B]
    طيب أنت ممكن تقول أن هذا خطأ لأن ذالك يعني أن الشاشة ستبقى ولن تذهب بما أن دالة Update تعمل في كل فريم أقول لك لأ هنا أنت سوف تعمل مرحلة جديدة ولن تضع فيها إلا الكاميرا وتضع هاذا السكربت فيها ثم تكتب رقم المرحلة الأخرى المطلوب الإنتقال إليها وعند تشغيل اللعبة ستجد أن هناك شاشة زرقاء غامقة تظهر ثم بعد 12.0 ثانية تنتقل إلى اللعبة وهذه هي أول شاشة تحميل لك مبارك .

    الآن بعد قراءة كل ماسبق أنت جاهز لعمل شاشات تحميل أكثر إحترافية وجمالية لذالك أنزل لأسفل واستعد ...

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

    1- ثابت : أ- نصي ب- صوري.
    2- متحرك : أ- نصي ب- صوري..


    الأولى : وهي الثابته أو غير المتحركة بما معناه أنه تكون تلك الشاشة الزرقاء وفيها نص مثل loading… أو صورة أو ماشابه وهو نوع سهل وغير متعب على عكس المتحرك الذي يؤدي إلى زيادة الأكواد وسوف نبدأ بالأولى لسهولتها إن شاء الله.

    3- النص والصورة (غير متحرك) :-
    وذالك يمكن بإستخدام دالْة جديدة ألا وهيOnGUI وهي تستخدم لعرض الصور أو النصوص على الشاشة وما إلى ذالك وسوف يكون التعديل في الكود كالتالي لعمل النصوص في الشاشة
    كود:
    [LEFT] [B]private var  loading_time = 12.0;[/B]
    [B]function Update () {[/B]
    [B]if (Time.time > loading_time) {[/B]
    [B]Application.Loadlevel (n);[/B]
    [B]}[/B]
    [B]}[/B]
    [B]Function OnGUI () {[/B]
    [B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40),"Loading…");[/B]
    [B]}[/B][/LEFT]
    مالذي أضفناه في الكود من أجل عرض كلمة Loading… في الشاشة ؟
    قمنا بإضافة الكود التالي :
    كود:
    [LEFT][B]Function OnGUI () {[/B]
    [B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40),"Loading…");[/B]
    [B]}[/B][/LEFT]
    هيا لنفصله
    أولا قمنا بتعريف الدالة الخاصة بعرض البيانات على الشاشة وهي OnGUI ثم قمنا بكتابة الأوامر بين {} الخاصة بها والأوامر هي :
    كود:
    [LEFT][B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40),"Loading…");[/B][/LEFT]
    أولا قمنا بتعريف الأوامر الخاصة بالدالة OnGUI بــ GUI. ثم قمنا بتعريف نص من نوع عنوان بــLabel () ثم بين القوسين الخاصين بالــLabel () نكتبنوع الشكل الذي سيكتب به العنوان وهنا بالتأكيد مستطيل ولكن لن نكتب إسمه بالإنجليزية كاملا وإنما أختصاره( (Rect
    ثم نكتب مكانه في الشاشة وأبعاده بين القوسين هنا أنا لم أكتب مكانه في الشاشة وإنما قمت بعمل كود يجعل الكلمة في منتصف الشاشة تلقائيا أي مهما تغيرت أبعاد الشاشة تتغير الكلمة لتبقى في منتصفها كالتالي :
    كود:
    [LEFT][B](Screen.width/2-(n),Screen.height/2[/B][/LEFT]
    أولا هنا في الكود تجد بداية إستدعاء لأوامر الخاصة بالشاشة بكتابة كلمةScreen ثم بتحديد البعد أفقيا بكلمة width ثم بقسمتها على 2 بــ /2 وذالك لقسمة بعد الشاشة على 2 لإيجاد منتصفها لكن كما تلاحظ هنا أنها بعد قسمتها على إثنين سوف تكون أول حرف من النص هو في المنتصف ويكون النص متجها إلى اليمين أكثر من توسطه لذالك نوجد الفرق (n) وهو نصف طول النص أو الصورة بالبيكسل كالنص هنا فنقدره تقديريا ونرى لكن أعتقد أن -20 كافيه جرب وأختار ما يناسبك بعد ذالك أنتهينا من التحديد الأفقي نأتي للعمودي ونفصله بفاصلة (,) ثم نكتب الكود التالي لنضع النص في منتصف الشاشة عموديا أيضا,Screen.height/2ثم بعد ذالك نقوم بكتاية حجم المستطيل الذي سيحتوي على النص أفقيا وعموديا بما يناسبنا مثلي أنا كتبته أفقيا 100 وعموديا 40 ثم نغلق القوس الأول ونكتب الفاصلة مرة أخرى (,) ثم نقوم بكتابة النص الذي نريده أن يظهر بين علامتي الإقتباس ("loading…") مثلا ثم نغلق القوس الآخر وفي النهاية نضع الفاصلة المنقوطة بعد أن أنتهينا من كل شيئ (... مبارك

    طيب لو أردنا جعل بدل النص صورة ؟؟؟
    أمر محير .... لا أبدا لن قوم سوى بالتالي : هذا هو الكود قبل التغيير :
    كود:
    [LEFT] [B]private var  loading_time = 12.0;[/B]
    [B]function Update () {[/B]
    [B]if (Time.time > loading_time) {[/B]
    [B]Application.Loadlevel (n);[/B]
    [B]}[/B]
    [B]}[/B]
    [B]Function OnGUI () {[/B]
    [B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40),"Loading…");[/B]
    [B]}[/B][/LEFT]
    وبعد التغيير يصير هكذا
    كود:
    [LEFT][B]Var loading : Textuer;[/B]
    [B]private var  loading_time = 12.0;[/B]
    [B]function Update () {[/B]
    [B]if (Time.time > loading_time) {[/B]
    [B]Application.Loadlevel (n);[/B]
    [B]}[/B]
    [B]}[/B]
    [B]Function OnGUI () {[/B]
    [B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40), Loading);[/B]
    [B]}[/B][/LEFT]
    ماذا أضفنا ؟؟ ..شيئ بسيط جدا :
    قمنا بتعريف متغير من نوع تكتشرvar : Textuer وطبعا هنا لن نكتب علامة المساوة وإنما ( : ) لأننا لن نعطي قيمة مباشرة له أو شيئ من هذا القبيل وبعد إضافة التكتشر قمنا بتغيير
    الكلمة في الكود
    كود:
    [LEFT][B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40), “Loading…”);[/B][/LEFT]
    إلى :
    كود:
    [LEFT][B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40), Loading);[/B][/LEFT]
    أي قمنا بتغيير الكلمة إلى إسم المتغير وقمنا بإلغاء علامتي الإقتباس لأننا نعرف شيئ معين ولسنا نكتب نص


    أكرر*****:

    أنتبه من حالات الحروف فاللغة حساسة لذالك.

    تم بحمدلله إكمال الجزء الأول من السلسة إن صح التعبير وهو لكيفية عمل الشاشة تحميل قبل بداية اللعبة أو المرحلة لكن من دون حركة وجاري إتمام الجزء الثاني
    إن شاء الله .........

    كل ما هو مكتوب هنا من تأليفي وكتابتي لذالك أرجو عدم النقل إلا بذكر المصدر
    شكرا...
    IMB
    إبراهيم باوزير


    تم إضافة الجزء الثاني رابط الدرس:
    http://www.maxforums.net/showthread.php?t=217563
    التعديل الأخير تم بواسطة imb; 13 / 10 / 2012, 05:00 PM. سبب آخر: نعديل خطأ في الكود
    イブラヒムです
    Baaaaaaaaak


  • #2
    يشرفني اول واحد يرد ع موضوعك
    مشكورر
    بارك الله فيك

    تعليق


    • #3
      ما اروعك للاسف في مواضيع كتير تحتاج تتثبت
      الحمدلله

      تعليق


      • #4
        GUI.Label(Rect(screen.wghit/2-(n),screen.hghit/2,100,40), Loading);
        يا معلم ابراهيم يوجد لديك خطأ في كتابة دالة عرض الشاشة وطولها

        المفروض هكذا أصح

        GUI.Label(Rect(screen.width/2-(n),screen.height/2,100,40), Loading);
        مع انه الدرس جميل ولكن يوجد فيه أخطاء لغوية في الكود وغيرها



        أكرر*****:
        أنتبه من حالات الحروف فاللغة حساسة لذالك.
        كل الكود تاعك عكس ما تكتب

        بعد تعديل كودك

        هكذا يصبح


        var Loading : Texture2D;
        private var loading_time = 12.0;

        function Update ()
        { if (Time.time > loading_time)
        { Application.Loadlevel (1);

        }

        }


        function OnGUI () { GUI.Label(Rect(Screen.width/2-(1),Screen.height/2,100,40), Loading);


        }


        تعليق


        • #5
          موضوع جميل تسلم اخ ابراهيم
          -:| My Games |:-
          AfterEarth Online SOON

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

          تعليق


          • #6
            المشاركة الأصلية بواسطة omarzonex مشاهدة المشاركة
            يا معلم ابراهيم يوجد لديك خطأ في كتابة دالة عرض الشاشة وطولها

            المفروض هكذا أصح



            مش عارف الكمبورير ما كشف الخطأ بتاعك

            انت أذكى منه يعني
            طالما الكومبيلر مطلعش خطا يعني سكربته صحيح وخالي من الاخطاء

            تعليق


            • #7
              هذا الكود بعد تصحيح الأخطاء فيه

              انا جربته عندي في اللعبة بعد جهد في اكتشاف الخطأ نيابة عن المتهم الماثل امام المحكمة




              كود:
              [COLOR="#0099ff"]var [/COLOR]Loading : [COLOR="#0099ff"]Texture2D[/COLOR];
               [COLOR="#0099ff"]private var[/COLOR] loading_time = [COLOR="#EE82EE"]12.0[/COLOR]; 
               
               [COLOR="#0099ff"]function [/COLOR]Update () 
              {
               [COLOR="#0099ff"]if[/COLOR] ([COLOR="#0099ff"]Time[/COLOR].time > loading_time)
              	 { 
              	 // //  //  //
              		[COLOR="#0099ff"]Application[/COLOR].LoadLevel([COLOR="#EE82EE"]1[/COLOR]);		  
              	  }
                  
              } 
                    
                    
                    [COLOR="#0099ff"]function [/COLOR]OnGUI () 
                 { 
                    
                    [COLOR="#0099ff"]GUI[/COLOR].Label([COLOR="#0099ff"]Rect[/COLOR]([COLOR="#0099ff"]Screen[/COLOR].width/[COLOR="#EE82EE"]2[/COLOR],[COLOR="#0099ff"]Screen[/COLOR].height/[COLOR="#EE82EE"]2[/COLOR],[COLOR="#EE82EE"]100[/COLOR],[COLOR="#EE82EE"]40[/COLOR]), Loading); 
                    
                    
                 }
              الموضوع جميل والشرح جذاب للغاية وبه رونق يلمع كصاحبه

              اما عند وقوع المحذور يحدث العكس عند مواجهة الحقيقة ......


              فتصبح القضية ضد مجهول .........

              تعليق


              • #8
                المشاركة الأصلية بواسطة kald__ksa مشاهدة المشاركة
                يشرفني اول واحد يرد ع موضوعك
                مشكورر
                بارك الله فيك
                لي الشرف أخي و
                جزاك الله خير أخي أرجو أنه أعجبك
                イブラヒムです
                Baaaaaaaaak

                تعليق


                • #9
                  المشاركة الأصلية بواسطة UA07 مشاهدة المشاركة
                  ما اروعك للاسف في مواضيع كتير تحتاج تتثبت
                  شكرا لك أخي لكن أعتقد هناك مواضيع أفضل من هذا بحاجة للتثبيت ياريت المشريف ينتبه عليها
                  التعديل الأخير تم بواسطة imb; 09 / 10 / 2012, 10:53 AM.
                  イブラヒムです
                  Baaaaaaaaak

                  تعليق


                  • #10
                    المشاركة الأصلية بواسطة omarzonex مشاهدة المشاركة
                    يا معلم ابراهيم يوجد لديك خطأ في كتابة دالة عرض الشاشة وطولها

                    المفروض هكذا أصح



                    مع انه الدرس جميل ولكن يوجد فيه أخطاء لغوية في الكود وغيرها








                    كل الكود تاعك عكس ما تكتب

                    بعد تعديل كودك

                    هكذا يصبح
                    غريبة والله ما أنتبهت
                    شكرا لك يا معلم عمر جاري التعديل
                    イブラヒムです
                    Baaaaaaaaak

                    تعليق


                    • #11
                      المشاركة الأصلية بواسطة NTSoft مشاهدة المشاركة
                      موضوع جميل تسلم اخ ابراهيم
                      شكرا لك أخي
                      イブラヒムです
                      Baaaaaaaaak

                      تعليق


                      • #12
                        المشاركة الأصلية بواسطة amineGS مشاهدة المشاركة
                        طالما الكومبيلر مطلعش خطا يعني سكربته صحيح وخالي من الاخطاء
                        هههه شكرا على الدفاع بس للأسف لم أجرب الكود بعد كتابته بسبب ضيق الوقت لذالك لم أنتبه للخطأ
                        イブラヒムです
                        Baaaaaaaaak

                        تعليق


                        • #13
                          المشاركة الأصلية بواسطة omarzonex مشاهدة المشاركة
                          هذا الكود بعد تصحيح الأخطاء فيه

                          انا جربته عندي في اللعبة بعد جهد في اكتشاف الخطأ نيابة عن المتهم الماثل امام المحكمة




                          كود:
                          [COLOR="#0099ff"]var [/COLOR]Loading : [COLOR="#0099ff"]Texture2D[/COLOR];
                           [COLOR="#0099ff"]private var[/COLOR] loading_time = [COLOR="#EE82EE"]12.0[/COLOR]; 
                           
                           [COLOR="#0099ff"]function [/COLOR]Update () 
                          {
                           [COLOR="#0099ff"]if[/COLOR] ([COLOR="#0099ff"]Time[/COLOR].time > loading_time)
                          	 { 
                          	 // //  //  //
                          		[COLOR="#0099ff"]Application[/COLOR].LoadLevel([COLOR="#EE82EE"]1[/COLOR]);		  
                          	  }
                              
                          } 
                                
                                
                                [COLOR="#0099ff"]function [/COLOR]OnGUI () 
                             { 
                                
                                [COLOR="#0099ff"]GUI[/COLOR].Label([COLOR="#0099ff"]Rect[/COLOR]([COLOR="#0099ff"]Screen[/COLOR].width/[COLOR="#EE82EE"]2[/COLOR],[COLOR="#0099ff"]Screen[/COLOR].height/[COLOR="#EE82EE"]2[/COLOR],[COLOR="#EE82EE"]100[/COLOR],[COLOR="#EE82EE"]40[/COLOR]), Loading); 
                                
                                
                             }
                          الموضوع جميل والشرح جذاب للغاية وبه رونق يلمع كصاحبه

                          اما عند وقوع المحذور يحدث العكس عند مواجهة الحقيقة ......


                          فتصبح القضية ضد مجهول .........

                          شكرا لك أخي وإنما القضية هي ضدي وأعترف بالأمر لكن سوف أغير الأدلة ولن يبقى أي شيئ ضدي
                          تم تعديل الأخطاء وهي جميعها في كود ضبط الشاشة المهم الحمدلله تم تلافي الخطأ وإن شاء الله ما تتكرر وأتمنى من أي أحد يجد خطأ أو معلومة خاطئة يخبرني بها فأنا بشر أخطئ وأصيب
                          イブラヒムです
                          Baaaaaaaaak

                          تعليق


                          • #14
                            شكرا لك ححبيبي أنا أطبق و أخبرك بالنتيجة إن شاء الله
                            يلعن روحك يا حافظ
                            مدونتي
                            http://blackcatgamedev.3abber.com
                            قناتي على YouTube
                            http://www.youtube.com/user/vexedwolff
                            مدونة ألعاب العرب ((نرجو الدعم))
                            http://arabgame.3abber.com
                            آخر تطورات لعبتي World Of Cube((أرجو النقد و التقيم))
                            إضغط هنا



                            تعليق


                            • #15
                              المشاركة الأصلية بواسطة blackcat مشاهدة المشاركة
                              شكرا لك ححبيبي أنا أطبق و أخبرك بالنتيجة إن شاء الله
                              العفو أخي أنا في الخدمة دائما
                              إن شاء الله يفيدك
                              イブラヒムです
                              Baaaaaaaaak

                              تعليق

                              يعمل...
                              X