عمل قائمة تحميل قبل بداية المرحلة أو اللعبة
"الجزء الثاني"
السلام عليكم ورحمة الله وبركاته
بعد إكمالنا التعرف على أساسيات عمل القائمة في الجزء الأول من السلسلة
والتعرف على طريقة عمل شاشات التحميل الثابتة-أو غير المتحركة-
نبدأ اليوم إن شاء الله بإضافة بعض الحياة لها وجعلها تتحرك
بداية وقبل بدأ الدرس أود أن أنبه أن كل الطرق التي سأذكرها تعتبر غيض من فيض
فكل مبرمج وله أكثر من طريقة لكن سأحاول ذكر الطرق البسيطة سهل الفهم بما أن الدروس موجهة للمبتدئين في المقام الأول وأيضا سأحاول ذكر أكثر من طريقة إن إستطعت ذالك
ملاحظة : أرجو قرائة الجزء الأول إن لم تكن تفهم شيئ أو مازلت مبتدإ جدا في البرمجة
http://www.maxforums.net/showthread.php?t=217440
لأنه يحتوي بين أسطره على ما سيفيدك في فهم هذا الدرس لأن هذا الدرس لن يكون بتوسع الدرس الدي قبله بإعتبار أنك قد فهمت التكنيك المتبع في الشرح لنبدأ بإسم الله

وسوف نبدأ بالشاشات النصية وثم ننتقل لمرحلة إضافة الصور أو ماشابه :-1- في البداية نبدأ بتذكر الكود الماضي الذي يساعدنا على إظهار نص في منتصف شاشة التحميل لمدة 12.0 ثانية وهو كالتالي :
كود:
[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]
بالنسبة لي أريد النص أن يظهر مثل ما كنت أشاهد في بعض الألعاب القديمة
Loading
Loading.
Loading..
Loading…
وهكذا تظهر الكلمة تم تضهر نقطة ثم نقطتان ثم ثلاث ثم تعود من دو نقاط وهكذا إلى ان تظهر اللعبة أوكي الآن بحسب ما فهمت بإعتقادك أولا وفي المقام الاول الأول مالذي ستفعله؟؟؟
بالنسبة لي وأعتقد أنه ما تظن سنعدل على الكود طبعا لكن كيييييييف؟؟؟
يأتي هنا التحدي وبداية يجب دراسة المعطيات التي ستزيد وهي بدل أن نضع نص واحد ستكون معنا 4 نصوص ويجب وضع عبارة شرطية للتحكم به كي يتم التبادل بسلاسة صح؟
إذا لنبدأ بالتعديل عليه خطوة خطوة في البداية يجب علينا كتابة كل النصوص المطلوبة وهي هنا أربع كلمات
إذا سنضيف أربعة أكود في دالةOnGUI وهي كالتالي :
GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40),"Loading");
قد تقولون هذا خطا بما أنه هكذا فستأتي الكلمات فوق بعضها لذالك هنا تكمن خدعة جديد وهي العبارات الشرطية كود:
[B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40),"Loading.");[/B] [B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40),"Loading..");[/B] [B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40),"Loading…");[/B]

الآن بعد كتابتنا للكلمات المطلوب ظهورها تباعا يجب ضبطها لتظهر كل في وقت معين بحيث لا تتداخل وتختفي عند إنتهاء وقتها المعين لها وسيكون ذالك بإضافة عبارات شرطية لأكواد الكلمات المطلوب ظهورها وأيضا بتعريف متغير يقوم بالزيادة دوريا مع مرور الوقت ويتوقف عند رقم معين ليعود للصفر ستفهم قصدي عند بداية شرح الكود تابع معي :
إذا سيكون الكود هكذا قبل التغيير :
كود:
[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]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40),"Loading.");[/B] [B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40),"Loading..");[/B] [B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40),"Loading…");[/B] [B]}[/B][/LEFT]
كود:
[LEFT] [B]private var loading_time = 12.0[/B][B]; [/B] [B]private var animation_w : int[/B][B];[/B] [B]function Start[/B][B] () {[/B] [B]animation_w = 0[/B][B];[/B] [B]}[/B] [B]function Update[/B][B] () {[/B] [B]if (Time.time > loading_time[/B][B]) {[/B] [B]Application.LoadLevel(n[/B][B]);[/B] [B]}[/B] [B]animation_w += 1[/B][B];[/B] [B]if (animation_w > 84){animation_w = 0[/B][B];}[/B] [B]} [/B] [B]function OnGUI[/B][B] () {[/B] [B]if (animation_w >=0 && animation_w <25[/B][B]) {[/B] [B]GUI.Label(Rect(Screen.width/2-20,Screen.height/2,100,40), "Loading[/B][B]"); [/B] [B]}[/B] [B]if (animation_w >=25 && animation_w <45[/B][B]) {[/B] [B]GUI.Label(Rect(Screen.width/2-20,Screen.height/2,100,40), "Loading[/B][B].");[/B] [B]}[/B] [B]if (animation_w >=45 && animation_w <65[/B][B]) {[/B] [B]GUI.Label(Rect(Screen.width/2-20,Screen.height/2,100,40), "Loading[/B][B]..");[/B] [B]}[/B] [B]if (animation_w >=65 && animation_w <85[/B][B]) {[/B] [B]GUI.Label(Rect(Screen.width/2-20,Screen.height/2,100,40), "Loading[/B][B]...");[/B] [B]}[/B] [B]}[/B][/LEFT]

أولا طبعا هنا لن نشرح الكود بالتفصيل الممل وإنما سوف أشرح التفاصيل الغير معروفة والتغييرات فقط بإعتبار أنك قد فهمت الأساس من الدرس الماضي (للإنتقال إليه إذهب للرابط أعلى الموضوع) طيب نكمل في البداية التغييرات في الكود كانت كالتالي وهي أولا عرفنا متغير يخزن في ذاكرة البرنامج تحت مسمى animation_w وهو من نوع عدد صحيح (int) ولن نحدد قيمته بل سنعرف نوعه فقط لأننا نريده أن يكون يبدأ تلقائيا وينتهي عندما نخبره ...
نكمل الآن بعد أن قمنا بعمل المتغير الذي سيرتكز عليه تحرك النص قمنا بعمل إجراء جديد وهو تعريف دالة Start وهي الدالة المعنية بعمل الأكواد التي بداخلها عند بداية تشغيل المرحلة أو اللعبة وقمنا فيها بإرجاع قيمة المتغير animation_w إلى الـصفر وذالك إجراء إحتياطي لتأكيد قيمته عند بداية الشاشة ثم بعد ذالك قمنا بزيادة أمري في دالة Update وهما الأول :
كود:
[LEFT][B]animation_w += 1[/B][B];[/B][/LEFT]
كود:
[LEFT][B]if (animation_w > 84){animation_w = 0[/B][B];}[/B][/LEFT]
ستفهم مغزى كل هذا عند إكمال الشرح)
طيب بعد ذالك نأتي للأهم الآن نحن لدينا أربعه أكود لأظهار أربعه نصوص على الشاشة لكن الأكود سوف تظهر في الشاشة في نفس الوقت وفوق بعضها وهذه مشكلة
لالالا أبدا سوف نقوم بالتعديل عليها الآن لنضيف الكريما على الكعكة

كود:
[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]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40),"Loading.");[/B] [B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40),"Loading..");[/B] [B]GUI.Label(Rect(Screen.width/2-(n),Screen.height/2,100,40),"Loading…");[/B] [B]}[/B][/LEFT]
كود:
[LEFT] [B]private var loading_time = 12.0[/B][B]; [/B] [B]private var animation_w : int[/B][B];[/B] [B]function Start[/B][B] () {[/B] [B]animation_w = 0[/B][B];[/B] [B]}[/B] [B]function Update[/B][B] () {[/B] [B]if (Time.time > loading_time[/B][B]) {[/B] [B]Application.LoadLevel(n[/B][B]);[/B] [B]}[/B] [B]animation_w += 1[/B][B];[/B] [B]if (animation_w > 84){animation_w = 0[/B][B];}[/B] [B]} [/B] [B]function OnGUI[/B][B] () {[/B] [B]if (animation_w >=0 && animation_w <25[/B][B]) {[/B] [B]GUI.Label(Rect(Screen.width/2-20,Screen.height/2,100,40), "Loading[/B][B]"); [/B] [B]}[/B] [B]if (animation_w >=25 && animation_w <45[/B][B]) {[/B] [B]GUI.Label(Rect(Screen.width/2-20,Screen.height/2,100,40), "Loading[/B][B].");[/B] [B]}[/B] [B]if (animation_w >=45 && animation_w <65[/B][B]) {[/B] [B]GUI.Label(Rect(Screen.width/2-20,Screen.height/2,100,40), "Loading[/B][B]..");[/B] [B]}[/B] [B]if (animation_w >=65 && animation_w <85[/B][B]) {[/B] [B]GUI.Label(Rect(Screen.width/2-20,Screen.height/2,100,40), "Loading[/B][B]...");[/B] [B]}[/B] [B]}[/B][/LEFT]

أولا هنا نحن قمنا بعمل التالي كانت أكواد إظهار النصوص تقوم بإظهار النص كما هو من دون أي شرط وإنما مادامت اللعبة أو المرحلة قد إشتغلت إذا تعمل الأكواد مباشرة وذالك سيشكل مشكلة لأن النصوص ستظهر في نفس الوقت وفوق بعضها لهذا نقوم بإضافة العبارات الشرطية لإضافة الحياة على تلك النصوص الميتة في أول كود لإظهار كلمة loading كان الكود هكذا :
كود:
[LEFT][B]GUI.Label(Rect(Screen.width/2-20,Screen.height/2,100,40), "Loading[/B][B]");[/B][/LEFT]

كود:
[LEFT] [B]if (animation_w >=0 && animation_w <25[/B][B]) {[/B] [B]GUI.Label(Rect(Screen.width/2-20,Screen.height/2,100,40), "Loading[/B][B]"); [/B] [B]}[/B][/LEFT]
قمنا بالآتي :
أولا بدأنا بإضافة أداة لشرط if ثم وضعنا الشرط وهو أهم تغيير وبهذا الشرط قمنا بربط المتغير animation_w بالنص ليظهر في وقت معين وفي قيمه معينه كالتالي إذا كان المتغير animation_w أكبر أو يساوي الصفر و إذا كان نفس المتغير أصغر من خمسة وعشرون ينفذ الكود الذي في منطقة جواب الشرط ووضعنا هناك كود إظهار النص بمعنى لن يظهر النص مالم يتحقق الشرط المكتوب والذي هو وجوب كون قيمة المتغير animation_w بين الصفر والخمسة العشرين وإن تعدا ال25 تختفي الكلمة لعدم تحقق الشرط .
ملاحظة: && هنا تستعمل للإلحاق وللشرط المغلظ إن صح التعبير يعني إذا لم يتحقق الشرطان لن يعمل الكود إذاً && تستعمل للإشتراط بأكثر من شرط مع إشتراط تحقق كل الشروط أما إن أردت أن يكون التحقق إذا تحقق الشرط أو الشرط الآخر بمعنى إن تحقق أي الشرطين وليس ضروريا كل الشروط تكتب || .
ثم نكتب بقية الشروط تباعا بالشكل التالي وهي أربع شروط في كل شرط إن تحقق تظهر كلمة من الكلمات الأربع وعندما تختفي تظهر في نفس اللحظة الكلمة التي تليها في عملية أشبه بالـ loop كالتالي:
1- إذا كانت قيمة المتغير animation_w أكبر أو يساوي الصفر وأصغر من خمسة وعشرون تظهر كلمة loading
2- إذا كانت قيمة المتغير animation_w قد تعدت الخمسة والعشرين بمعنى أنها أكبر أو يساوي الخمسة والعشرين (هنا قلنا أنه أيضا تساويه لأن الكلمة السابقة إن وصلت للرقم 25 تختفي فإن لم تكن هذه الكلمة تظهر في الرقم 25 فستلاحظ تقطع صغير سيشوه الشكل)وأصغر من45 تظهر كلمة loading.
3- إذا كانت قيمة المتغير animation_w قد تعدت ال45 أو تساويه وأصغر من ال65 تظهر كلمة loading..
4- إذا كانت قيمة المتغير animation_w قد تعدت ال65 أو تساويه وأصغر من 85 تظهر كلمة loading…
ملاحظة :إن كنت تتذكر الكود الذي يرجع قيمة المتغير animation_w إلى الصفر عند بلوغه القيمة 84 لكن آخر كلمة تبقى تظهر إلى القيمة 85 هنا قمت بعمل ذالك حتى لايحدث تقطع أيضا في الحركة قم بتعديل الكود ولاحظ...
وأيضا هنا قد تقول أنت أن الأرقام كبيرة وقد يسبب بطئ في ظهور النص بالشكل المطلوب؟
لا أبد لأنه لو تتذكر أن المتغير يزيد بزيادة عدد الفريمات التي قد ظهرت وسرعة ظهور الفريمات كبيرة لكن من الممكن التعديل إن أردت تغيير طريقة إحتساب سرعة زيادة قيمة المتغير كما تشاء أنا هنا وضحت الفكرة الأساسية والبقية يجب أن تكون من إبداعاتك أنا مجرد مرشد لبداية الطريق وعليك الإكمال
هذا كل شيئ بالنسبة للشاشات النصية المتحركة ....
تعليق