السلام عليكم و رحمة الله و بركاته
اقدم لكم الدرس الخامس اللذي يتناول لغة الدارك بيسيك
و اسف على التاخير بسبب الانشغال المفاجيء
هل قمت بقرائة الدروس السابقة؟؟؟
درسنا اليوم سيكون عن كشف التصادم للعوالم
فمثلا لو قمت بتصميم عالم ببرنامج تصميم ثلاثي الابعاد باي برنامج تريد
مثلا
3d max,maya,3d world studio
او اس كان لكن المهم التصدير لنمط x
نريد ان نكشف التصادم لكي لا يدخل البطل داخل الجدران و هكذا
و هنا لا نستطيع استخدام طريقة كشف التصادم التقليدية
يجب ان نستخدم طريقة اكثر تطوراً
لقد قمت بتصميم عالم صغير بواسطة الماكس موجود مع المثال
و جعلت منتصف هذا العالم اي النقطة 0,0,0
خالية لكي اضع فيها اللاعب بدون الحاجة لتعقيد المثال
|
|
|
|
قبل المثال كالعادة سأشرح الاوامر الجديدة
اولا
كود:
return=intesect object ([object number],x1,y1,z1,x2,y2,z2)
هاذا هو بطل هذا الدرس حيث سسقوم هاذا الامر بمد خط بين النقطتين اللتين تحددهما
و حدث و ان مر هاذا الخط من خلال الكائن او الاوبجكت اللذي تحدد رقمه في اول parameter
سيرجع المسافة بين النقطة الاولى و مكان حدوث التتقاطع
و سيرجع صفر اذا لم يحدث تقاطع حلو؟؟
يعني الان المطلوب هو مد خط يمتد من موقع البطل الى نقطة اخرى امام البطل او بالاتجاه
المطلوب
يمكن استخدام هذه الدالة للتحقق اذا كان الاعداء يستطيعون رؤيتك اي لا يوجد عائق بينك و بينهم
و الكثير الكثير......
لكن تذكرواانها عملية معقدة و الاكثار منها في اللفة الواحدة اضافة لعدد مضلعات العالم سيؤدي الى بطئ اللعبة! استخدموها بحذر
و هنا سالمح عن الحل اذا احتجتم للاكثار منها و هو حل انا استنتجته بنفسي
و هو عمل عالم بقسمين القسم و تصديرهم على كائنين منفصلين
الاول يحوي الارض و الحوائط اي الاشياء اللي يجب التحقق من التصادم معها
اي بالمختصر .... عدد المضلعات يجب ان يكون قليل نسبيا ... لا داعي للتعقيد
و القسم الثاني يحوي على الاشياء المفصلة بالعالم مثلا الاشجار و التماثيل و هكذا
لولا توصلت لهذه الحركة لكانت كهف الموت بطيئة و بدون تفاصيل في الجولات
كود:
return = wrapvalue(value)
تعطيه قيمة دائرية لو كانت هذه القيمة اكبر من 360 سيحولها الى قيمة صحيحة
اي من 0 اى 360
و الان الى دالة مهمة اخرى
بالاحرى هي عبارة عن عدة دالات بنفس المهمة
و مهمة هذه الدوال التوصل لنقطة باتجاه معين و بعد معين
لنفرض انك تنظر الى الاتجاه 150 و تريد ان تحسب مكان النقطة اللتي تنظر اليها اي امامك
و اللتي تقع بالبعد 10 فنستخدم
كود:
newxvalue(currentXvalue,angle,step)
وهذه سترجع مكان النقطة حسب الاحداثي X
currentXvalue اقصد فيها مكان النقطة اللتي تريد الحساب منها
angle الاتجاه المرغوب
step بعد النقطة المراد حسابها
هذا بالنسبة للاحداثية X
بالنسبة للاحداثيات الاخرى.......
كود:
newyvalue(currentYvalue,angle,step)
كود:
newzvalue(currentZvalue,angle,step)
لن تستخدم عملية الاحداثية Y كثيرا لان الارتفاع غالبا ثابت
و يتم حسابه عن طريق كشف التصادم من الاسفل
الان الى المثال.................
المثال مرفق و مضغوط بالـ RAR و معه عالم للتجربة
و داخل المثال مشروح بالتفصيل
بواسطة ` حيث الـ compiler لن يكترث لاي شيء مكتوب بعد `
المثال موجود في المرفقات على شكل ملف project مع عالم بسيط قمت بتصميمه من اجل المثال
تذكرو انه يجب فتح ملف الـ project و ليس source للحصول على النتائج المرادة
ارجوا ان يكون الدرس قد اعجبكم