المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : [سلسة دروس RGSS2 ]الدرس الاول لتعلم برمجة الـ RGSS2 (تعلم بسهولة)



CalmKiller
20-07-2008, 11:02 PM
بسم الله الرحمن الرحيم
اللهم وفقنا في أمرنا *


بداية:("ملحوظة في المرفقات يوجد الدرس بصيغة pdf اي يجب ان يكون عندك adobe reader هذا خيار بديل لقراءة الدرس اذا كانت هناك اخطاء في الموضوع")
قبل أن أبدا الشرح الرجاء أن تقرؤوا بعناية حتى لا يفوتكم ما يهم
خذ استراحة دقيقة قبل أن تبدأ عشان نركز مع بعض


أولا :: حتى تبدأ في فهم نظام RGSS2
علينا أن نتعرف على بعض المبادئ الأساسية
سؤال : هل ستضجرنا بان تتكلم عن ملف المساعدة و الكلام ده؟
جواب : لا طبعا عشان أنا أصلا بزهق من الرغي في الحاجات ده.


أولا خلينا أعرفكم على أنواع أل Classes
لكل كلاس مهمة خاصة و تنقسم حسب تصنيف الكلاس


1-هناك كلاسات للنوافذ " أي كلاسات مسئولة عن تكوين شاشة في مكان ما" و هذه الكلاسات لها ظروف خاصة سنتحدث عن ظروف كل كلاس فيما بعد


2- كلاسات اللعبة "كلاسات تحمل عوامل اللعبة الأساسية كالتدخل في حدث ما و الخ........


3- كلاسات السبيريت "كلاسات تحمل كيفية تكوين الصور بتمابس بطرق مختلفة .
4- كلاسات المشاهد Scene "تعتبر أهم كلاسات في اللعبة لأنها تتعامل مع اللاعب و ما يحدث من إدخال للأوامر و تستدعي نوافذ و أشياء كثيرة كل على حسب ما صممت من اجله



++++++++++++++++++++++++++++++++++++++
الآن بعد أن تعرفنا على أنواع الكلاسات حان الوقت حتى نبدأ الشرح الحقيقي :


انتبه لما يلي.......
سوف يتم الشرح بإعطاء مثال ثم شرح المثال بالكامل
==
المثال الأول :
هدف المثال عمل شاشة تظهر في أول اللعبة و تقول "مرحبا"
الكود :



Print("مرحبا ")


اعمل للكود ده نسخ و حطه في الـMain
بعد السطر ده
Begin

ابتدي اللعبة حتلاقي ان في رسالة ظهرت بتقولك مرحبا
"في اسهل من كده ؟"
الامر اللي احنا استخدمناه هو امر print و هو يقوم بطباعة رسالة لللاعب...
==
المثال الثاني :
هدف المثال اضافة زر جديد في مشهد البداية Scene_Title


الطريقة:
الحكاية بسيطة جدا اذهب الى سكربت مشهد البداية
حتلاقي الاتي:



s1 = Vocab::new_game
s2 = Vocab::continue
s3 = Vocab::shutdown
@command_window = Window_Command.new(172, [s1, s2, s3])


-
سؤال : الكلام ده معناه ايه ؟
جواب : في اول ثلاث سطور كاتب السكربت عرف ثلاث حاجات هي
S1,S2,S3
و اداهم قيمة و هي Vocab::
مما يدل على انهم كلام لانك لو راجعت فصل الـ Vocab
حتلاقي انه يعرف بعض الكلمات على شكل اوامر
عموما vocab::new_game معناه new game
و هكذا...
اما بالنسبة للسطر الرابع فهو سطر الاوامر التي تظهر في النافذة الصغيرة ...
حسنا لاضافة امر جديد عليك ان تعرف هذا الامر
اذن بعد السطر s3 = Vocab::shutdown
ادخل تعريف جديد لا يجب ان يكون s4 و لكن يفضل ان تسميه s4 حتى يكون السكربت منظم و سهل التطوير
اذن بعد ان ادخلته يجب ان يكون السكربت على الشكل الاتي



S3 = Vocab::shut_down
S4 = "test"


لاحظ ان قيمة التعريف لا يجب ان تكون Vocab::test و اذا اعطيت التعريف هذه القيمة سيحدث خطا
لانه لا يوجد Vocab::test و لكن اعط التعريف قيمة "test" مع وضع علامتي التنصيص



حسنا الان بعض ان اعطيت للتعريف قيمته انظر في السطر الرابع :
@command_window = Window_Command.new(172, [s1, s2, s3])

ستجد ان هذا السطر هو المسئول عن ظهور الاوامر في نافذة شاشة البداية
اذن حول
(172, [s1, s2, s3])
الى
(172, [s1, s2, s3, s4])
كما ترى ان الترتيب غير ضروري اي لا يجب ان نضع s4 بعد s3
و لكن يمكنك و ضعها في اي مكان لان السكربت لا يهتم باسم التعريف و لكن مهتم بقيمته
و لكن اذا و ضعته قبل s3 مثلا سيتطلب هذا بعد التحديثات في السكربت سوف نذكرها اثناء الشرح


الان ابدا اللعبة في شاشة البداية ستلاحظ ظهور زر جديد اسمه "test"


===========
لاحظ ما يلي انه عند الضغط على الزر test لن يحدث شيء لانه لم يربط بحدث معين
===========



مثال 3 :
الهدف من المثال : ان تظهر نافذة جديدة بها اكثر من خيار عند الضغط على الزر test في شاشة البداية


الشرح:
حسنا الان نحن نتعامل مع مشهد كامل و لذلك سوف نقوم بانتاج اول سكربت لنا مع بعضنا الان ركز معي في هذا الشرح لان السكربتات الروبي RGSS2 مبنية على ما سنقوم به الان:


1- في قائمة الكلاسات ادخل كلاس جديد سمه كما تريد و ليكن بعد Materials


في داخل الكلاس سوف ترى صفحة بيضاء لم يكتب فيها شيء
اذن ما علينا فعله هو ادخال بعض البرمجة في هذه الصفحة:
لا تعمل نسخ و لصق للاكواد التالية و لكن تمعن فيها و حاول ادخالها نفسك.


2- اولا علينا ان نعرف الكلاس الجديد و لاي نوع ينتمي اليه
اذن نحن نريد كلاس مشاهد حتى يتعامل مع ادخالات اللاعب
اذن ادخل الاتي : في اول سطر
class Test_Scene < Scene_Base

كما ترى ان اسم الكلاس المدخل في التعريف يجب ان يكون حرف كابيتال اي انه اذا ادخلت اسم الكلاس
test_scene او test_Scene سوف ينتج خطا
لذلك ندخله Test_Scene او Test_scene


الان بعد ان عرفنا ان الكلاس كلاس مشاهد علينا ان نعرف الاساسيات
بما اننا نريد ان تظهر خيارات عن الدخول الى المشهد
اذن نعرف نافذة جديدة نسميها "على سبيل المثال" test_window


اذن كود التعريف لعمل النافذة سيكون كالتالي سيكون كالتالي



def create_test_window
i1 = "this is"
i2 = "a"
i3 = "training"
@test_window = Window_Command.new(100, [i1,i2,i3])
end


في الكود السابق بتاع عمل نافذة حشرح فيه كم حاجة
اولا def هي اختصار لكلمة define معناها "عرف"
طبعا لما تعنل لاي حاجة def او اي امر تاني لازم تنهي الامر بـ end
عموما انتم شايفين السطر التاني في الكود مكتوب فيه @test_window = Window_Command.new
ده معناه انه لما نستدع الامر create_test_window
السكربت حينتج نافذة اوامر "commands "
اما بالنسبة لـ
(100, [i1,i2,i3])
اولا الرقم 100 يعبر عن عرض نافذة الاوامر اما بالنسبة ل [i1,i2,i3] دي اسماء الزراير


كده انا شرحت تعريف صنع النافذة
و دلوقتي احنا لازم نخلي علامة التحديد تتحرك بين الزراير
كده يبقى احنا عايزين نعرف امر التحديث
الكود حيبقى كده:



def update
super
@test_window.update
if Input.trigger?(Input::B)
Sound.play_cancel
dispose_test_window
$scene = Scene_Title.new
elsif Input.trigger?(Input::C)
end
end


الكود شكله رخم لكن صدقني لازم تتعود عليه عشان حنضطر نستخدم كتير
دلوقتي شرح الكود ده :
ثاني سطر if Input.trigger?(Input::B)
السطر ده بيسأل لو حدث ضغط لزر الالغاء Cancel ايه اللي يحصل
في الثلاث سطور اللي بعده مكتوب الاتي
اولا Sound.play_cancel معناه انه يشغل صوت الالغاء
ثانيا dispose_test_window معناه انه يلغي نافذة test التي عرفناها سابقا " ولكننا لم نعرف امر الغاء النافذة بعد و سوف اشرح امر الالغاء اثنا الشرح"
ثالثا $scene = Scene_Title.new السطر ده معناه انه يعمل مشهد بداية جديد .


اما بالنسبة للسطر الرابع
elsif Input.trigger?(Input::C)
السطر ده بيسأل اذا لم يكن الزر المضغوط زر الغاء و كان زر اختيار Decision ماذا يحدث
انا طبعا مش فاضي (: فخليته ما يعملش حاجة عشان سبته فاضي و بعدين اغلقت امر الشرط if بـ end
عموما احنا و صلنا لحد هنا خد فترة راحة قبل ما تكمل .....


لو سمعت كلامي و استريحت يبقى كويس لو كملت قراءة يبقى ذنبك على جنبك


دلوقتي جه الوقت اللي نعرف فيه الغاء نافذة test
الكود حيبقى بالشكل ده :



def dispose_test_window
@test_winow.dispose
end


حاجة سهلة مش كده شرح الكود
في السطر الثاني @test_window.dispose
ده معناه انه يلغي نافذة الاوامر بتاعة ال test
و بس.


دلوقتي جه وقت نعرف البداية بتاعة المشهد اللي احنا عملناه :



def start
super
create_test_window
update
end


مع ان الكود صغير بس هو ده اهم كود لانه اللي يبتدي المشهد اللي احنا عملناه...
طبعا من الواضح ان الاوامر هي صنع نافذة test و استعداد التحديث


عموما لو انت عملت كل حاجة صح من غير اخطاء الكود سيكون على هذا الشكل



class Test_Scene < Scene_Base
def start
super
create_test_window
update
end
def create_test_window
i1 = "this is"
i2 = "a"
i3 = "training"
@test_window = Window_Command.new(100, [i1, i2, i3])
end
def dispose_test_window
@test_window.dispose
end
def update
super
@test_window.update
if Input.trigger?(Input::B)
Sound.play_cancel
dispose_test_window
$scene = Scene_Title.new
elsif Input.trigger?(Input::C)
end
end
end


لو انت مركز معايا تلاحظ ان في آخر الكلاس انا وضعت end زيادة
اوعى تقول يا سلام الواد ده كريم قوي بيحط ends من عنده هدية
الـ end الاخيرة ده تدل على نهاية الكلاس و بدونها سيحدث اخطاء لان السكربت لم يتمكن من ايجاد نهاية للكلاس
======
======
الله اكبر انت لو وصلت لهنا انا فخور جدا بيك بس فاضل آخر حاجة
======
بس احنا لسه ما خلصناش فاضل اننا نربط المشهد ده بزرار الـ test اللي احنا عملناه في مشهد الـ Title
عشان نعمل كده اعمل الاتي:
في الـ Scene_Title
دور عن تعريف التحديث update
حيكون كالاتي:



def update
super
@command_window.update
if Input.trigger?(Input::C)
case @command_window.index
when 0 #New game
command_new_game
when 1 # Continue
command_continue
when 2 # Shutdown
command_shutdown
end
end
end


دلوقتي الاوامر دي كلها بتؤدي لحاجات زي بداية اللعبة او اكمل اللعبة او انهاء اللعبة
احنا عايزين نضيف انه لو كانت الـ index 3 يرسلنا الى المشهد اللي احنا عملناه
اولا اعرفك يعني ايه index حشرحها بطريقة بسيطة
index 0 = button 1
index 1 = button 2
و هكذا....
اذن بعد command_shutdown
ادخل الكود ده :
when 3
$scene = Test_Scene.new

و بس و اياك تحط end عشان الـ end محطوطة اصلا
انت عارف انك دلوقتي ربط الزرار بالمشهد بتاعك و هو اهم من اهم اهم حاجة عشان من غير كده يبقى المشهد كله فشنك ..


عموما ابدا اللعبة و اضغط على زرار الـ test
حتلاقي ان اللعبة انتقلت لمشهد الـ test اللي عملناه.....مبروك.....
==========================
انتهى شرح الدرس الاول
في الدرس القادم ان شاء الله
سكربتات اكثر تعقيدا و التعامل مع الاستدعائات و ايضا طرق تعديل كلاس من داخل كلاس
و بالتاكيد سوف ندرس بعض من الاومر و نتعرف على الـ arrays و بعض الحاجات زي الـ super
==========================
"حقوق الدروس محفوظة حسك عينك اشوفك ناسخ الدرس اللي تعبت فيه
و كاتب اسمك عليه "
==========================
الى اللقاء في الدرس القدم اترككم بعون الله
==========================

Kamuri-San
21-07-2008, 12:01 AM
وااااااااااااااو
موضوع مميز من عضو اكثر تميزا
كنا بانتظار درس مثل هذا
مشكووووووووووووور
اكثر كلمات الشكر لن تصف شكرنا لهذا الموضوع
^____________~
في امان الله

ابداعاتي
21-07-2008, 12:16 PM
تسلم على الشرح المميز

وفي انتظار الدروس القادمة

aliasdcxz
29-05-2009, 05:20 PM
لو سمحت الclass اشلون ادخلة

Karim Ghazal
29-05-2009, 10:44 PM
موضوع قديم , مُغلق