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

مشاهدة النسخة كاملة : خطوة بخطوة لعمل لعبة ثلاثية الأبعاد بالدركبيسك - (الجزء الثانى) - بقلم : احمد البنا



Ahmedbna
06-02-2009, 09:35 AM
ادخال و ازاحة العنصر أو الأبجكت

اهداف الدرس : سنعلمك كيف تغير مواضع العنصر object وتجعله يستدير بأستخدام لوحة المفاتيح .

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


Rem Setup sync rate
Sync On
Sync Rate 30
Rem Create sphere
Make object cube 1,100
Rem Main loop
Do
Rem Store the object's Y angle in aY#
aY# = Object angle Y(1)

Rem Control input
If Upkey()=1 then Move object 1,2
If Leftkey()=1 then aY# = Wrapvalue(aY#+5)
If Rightkey()=1 then aY# = Wrapvalue(aY#-5)

Rem rotate the sphere
Yrotate object 1,aY#

Rem Refresh Screen
Sync
Loop

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



aY# = Object angle Y(1)


فى هذا السطر نحن خزنا الزاوية y للأبجكت رقم 1 فى المتغير "aY#" لأحظ ان العلامة # هى رمز يخبر الداركبيسك بأن المتغير عشرى floating والمتتغير العشرى او الكسر معروف مثل 3.5 أو 1.0000 .... الخ اذا هو يسمح للمتغير بالتعامل مع كل كسر موجود ،،، هناك بعض المتغيرات للدركبيسك تستخدم متغيرات حرفية string أو مصفوفات arrays وايضا intergers اعداد صحيحة،، المتغيرات الحرفية تستخدم الرمز $ فى تخزين البيانات كهذا المثال A$ = "Hello World" ". ، وطبعا بيانات المتغير الحرفى يجب ان توضع كما ترى بين علامتى اقتباس ... أما المصفوفات تخزن مجموعات من البيانات فى نفس البيانات عموما سوف نبحث المصفوفات فى درس لاحق . ،، المتغيرات الصحيحة Integers تخزن ارقام صحيحة سواء ان كانت موجبة او سالبة كمثال ( 5- أو 5 ، 1000- أو 2000 أو 2513 أو 4561- ... الخ) ولاحظ ان integers لا ستخدم امتدادات واقصد طبعا امتدادات عشرية او ما خلافة .
حاول ان تجعل اسماء المتغيرات تدل على مغزاها او محتواته حتى لا تتوه او اذ احببت ان تتبادل الكود مع صديق لك لا يتوه فى تلك المتغيرات ووظائفها كما ستنفعك تلك الطريقة فى معرفة اكتشاف خطأك بسهولة ، فى مثالنا نحن سمينا هذا المتغير "aY#" لكى يمثل الزاوية y للأبجكت رقم 1 ، ملاحظة بسيطة لم نستخدم الأسم "AngleY#" كمثال بسبب اننا لا نريد ان يبقى الأسم طويلا ، لكن بالطبع تستطيع تغيير الأسم الى اى اسم تراه سهل لك لقرائته .



If Upkey()=1 then Move object 1,2


if - then هى تعبير شائع كثيرا فى لغة الدراكبيسك ، يتم كتابة ما تريده ان يحدث بعد عبارة if ، لو كان ما تريدة صحيحا اذن نفذ ما بعد العبارة then ولو كان ما تريده خاطئا اذن تجاهل ما بعد العبارة then http://www.bna.eg.vg/images/smilies/smile.gif اظنك قد بدأت تستوعب يعنى لو شرحنا الأمر بالعامية نقول لو حصل الحدث كذا اذن افعل الأمر كذا ، ولو لم يحدث الحدث كذا فلا تفعل كذا ، اظنى بسطت الأمر ،، اما العبارة "Upkey()" فهى عبارة وضعت بعد الأمر if فى مثالنا هذا ، وعبارة "Upkey()" هى فى الأصل أمر ليختبر ما اذا كان المستخدم سيضغط المفتاح (سهم لأعلى) من لوحة المفاتيح ام لا وهذا الأمر اذا جعلناه = الرقم 1 فمعناه ان المفتاح قد تم الضغط عليه ام اذا كان = 0 فمعناه انه لم يتم الضغط علية بعد ، لو ان المفتاح upkey تم الضغط عليه سينفذ الأمر اللذى يلية وسيحرك الأوبجكت مباشرة عن طريق الأمر move object ، اول رقم بعد الأمر move object هو رقم تعريف الأبجكت id ، اما الرقم الثانى بعده فهو رقم مقدار الوحدات المدفوعة فى كل مرة وانت ضاغط على الزر ، ممكن تسميته فى مثالنا هذا برقم السرعة .


If Leftkey()=1 then aY# = Wrapvalue(aY#+5)
If Rightkey()=1 then aY# = Wrapvalue(aY#-5)

هذا ان السطران اللذى بهم الأمران IF - THEN هما لأختبار ما اذا كانت الأزرار (سهم لأيمن)و(سهم لأيسر) مضغوطان ام لا ، ماذا سيحدث اذ تم الضغط على اى من المفتاحين هذا ما سأقوله ، هنا نحن استخدمنا المتغير "aY#" لكى يخزن قيمة .،،، الأمر "Wrapvalue" هى عبارة عن امر تثبيت لقيمة دائرية تقبل اكبر من الصفر واقل من 360 يعنى بالعامية امر يولد قيمة دائرية من صفر الى 360 ، وهذا الرقم هو ما سنستخدمة فى حساب مثالنا هذا للزوايا ، لو ان القيمة خرجت عن هذه الحدود سواء بأقل أو بأكثر ستقوم الدالة او الأمر Wrapvalue بأعادة لفها ، سوف تلف القيمة فى مثالنا من 365 الى القيمة 5 ،، اما داخل الأقواس فلقد وضعنا متغير الزاوية Y ثم ضفنا وطرحنا فى كلا السطرين العملية القيمة 5 ، اذن لو ضغط المفتاح الأيسر ستضاف القيمة 5 الى "aY#" وسوف تخزن فى المتغير "aY#" .


Yrotate object 1,aY#

ال "Yrotate object" هو امر استدارة للأوبجكت حول المحور Y ، اول رقم بعد الأمر هو رقم الأوبجكت اللذى تريد تدويرة ، اما الرقم الثانى فهى الزاوية اللتى تريد تدويرها للأبجكت ، ملاحظة لقد وضعنا مكان الرقم فى الثانى فى مثالنا متغير variable ، وفى كل مشاريع الدرك بيسك تستطيع تبديل هذا الرقم بمتغير ،،،،، اما اخر امر فهو امر SYNC وهو طبعا لتحديث المشهد انه مثل الريندر كما شرحناه فى الدرس السابق .

اتمنى ان تكونوا قد استوعبتم الدرس ، حاولوا تغيير القيم بتتعرفوا اكثر على خبايا اكثر تسطيعون مثلا ذيادة رقم Move object 1,2 لتزيدو السرعة ، تسطيعون التبديل بين محاور الزاوية فى الأمر Object angle بدلا من Y الى X أو Z ،، وغيرة من الكثير من الخبايا ...

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


ملاحظة : قد تجد فى بعض الأسطر ان الكود معكوس والسبب طبعا صفحات الوب اللتى اكتب فيها الدرس ، وللتغلب على تلك المشكلة ومعرفة الكود بشكله الصحيح انسخ الكود مباشرة داخل برنامج الدركبيسك

اسود الرافدين
06-02-2009, 10:33 AM
بارك الله فيك اخوي فعلا دروسك رائعه ومفيده لنا

احب اسئلك سؤال اذا عملت لعبه محترفة بالدارك بيسك هل تواجهك مشاكل البطيئ مثل الجيم ميكر؟؟

Ahmedbna
06-02-2009, 11:02 AM
السلام عليكم
مرحب بيك اخوى أسود الرافدين ونورت المشاركة
- خلى بالك ان اى محرك العاب فى العالم ممكن تواجه به مشكله البطى حتى وان كان محرك يستخدم لغة قوية ك ++c وللتغلب على تلك المشكلة فى الغالب ينصح من التقليل من الأبجكت المتحركك واللذى من الممكن ان تستخدمة بكثرة فى حدث واحد ، او من الموديلز الثقيل الموجود فى بؤرة تجمعية ايضا ، وايضا مصمم المكس عليه عامل مع المبرمج لحل تلك المشكلة ، فلابد من ان يراعى المصمم تصميم مجسمات لوبولى وتقليل عدد polygos فى الغالب حتى تتغلب على تلك المشكلة ، وستلاحظ فى لعبة مثل العاب gta ان ليس كل ما تراه بالخريطة محمل وذلك ليتغلبوا على البطىء بسبب كبر المساحة ،، اما الجيم ميكر فأعتقادى الشخصى انه صمم خصيصا لألعاب ثنائية الأبعاد وان كانوا قد طوروه ليصنع الألعاب الثلاثية الأبعاد ، لكن فى وجهة نظرى هو ليس بالبرنامج القوى ولهذا ستجد البطىء فيه اكثر من اى محرك اخر يدعم لغة برمجة قوية ومميزة مثل darkbasic - ++c - delphi ... الخ ،، اتمنى ان أكون افدتك ، تحياتى لك ، شكرا على المرور

Karim Ghazal
06-02-2009, 08:33 PM
ما أعرف شاكول , بارك الله فيك هي كُل ما عندي ,

+

أرجوا بعدما تنتهي , أن تجمع الدروس في موضوع واحد + لك تكريم على ذلك ..

Ahmedbna
07-02-2009, 04:13 PM
شكرا لك اخى كريم على مرورك الكريم على الموضوع ، وان كنت ارى ان الغالبية من الأعضاء لا يفضلون البرمجة وهذا واضح من قلة الردود ، لكن هذا بالطبع لن يمنعنى من مواصلة سلسلة هذه الدروس اللتى بدأتها واللتى ربما تمتد الى 25 جزء أخر ، ولكنى فى الغالب وكما قلت فى السابق سأضع جزء كل اسبوع ليستوعب المتعلمون كل جزء جيدا فى هذه الفترة،،، ان شاء الله عندما انتهى من كتابة وعرض سلسلة هذه الدروس كاملة فى المنتدى سابحث اقتراحك واضعهم كلهم بموضوع واحد ،، تحياتى لك

The_source
09-02-2009, 08:49 AM
السلام عليكم

ماشاء الله عليك عندك روح ونفس لهذا الشيء ....إن شاء الله بيستمر هذا الشيء فيك.
وكما قلت


وان كنت ارى ان الغالبية من الأعضاء لا يفضلون البرمجة وهذا واضح من قلة الردود

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

Ahmedbna
09-02-2009, 09:36 PM
مشكور اخى نجد على مرورك على الموضوع

AMB0
11-02-2009, 06:04 PM
خطوه بخطوه للفهم





صح



مشكور