بسم الله الرحمن الرحيم
هذا هو الموضوع الرابع من سلسلة مواضيع (أسرار و خدع في برمجة الألعاب) , سنتكلم في هذا الموضوع عن التصادم , كيف يفعلونها في الالعاب, و تذكر ان هذا الموضوع لا يشرح علي لغة او برنامج معين و انما نشرح التكنيك ليستعمل علي اى لغة او برنامج.
اكتشاف التصادم :
نحتاج دائما في الالعاب ان نكشف عن التصادم , لنعرف مثلا اذا كانت هناك طلقة اصطدمت باللاعب , او ان طائرة اللاعب اصطدمت بالأرض او مبني !! ,هناك اكثر من تكنيك يستخدم لاكتشاف التصادم في الألعاب و كل تكنيك يختلف في دقته و تكلفته للجهاز !! , فالنبدأ و نري بعض هذه الطرق .
الطريقة الأولي (المسافة) :
الطريقة الأولي هي ان نقيس المسافة بين المجسمين و اذا كانت المسافة اقل من عدد معين فنعتبر ان المجسمان متصطدمان , فمثلا هذه الصورة :
فالان نعتبر ان المسافة بين المجسمين 80 فليس هناك تصادم و لكن الصورة هنا :
المسافة اصبحت 50 فأصبح هناك تصادم و لكن لو تلاحظ ان هذا النوع من التصادم غير دقيق فشكل المجسم حجموا غير متوازي فمثلا لو حاولنا ان نفيس التصادم بهذه المنقطة من الجنب فستحصل مشكلة هكذا :
حسنا المسافة هنا 50 و طبقا لحسابتنا فهذا الدبابتان بينهم تصادم مع انهم بعيدين عن بعض تماما !! , حسنا نستنتج من هذا ان هذه الطريقة للتحقق من التصادم ليست دقيقة و لكن من الممكن استعمالها في العاب بسيطة و لكنها ايضا كما تري غير مكلفة للجهاز تمام .
الطريقة الثانية (Bounding box,sphere)
تقوم هذه الطريقة علي عمل مربع او دائرة تعبر عن المجسم و يكون لهذا المربع او الدائرة خصائص و هي : المكان و الحجم , بمعني ان لكل دبابة من الدبابات التي في الصور يكون هناك دائرة وهمية غير موجودة غير في حساباتنا تكون مثل هذه :
حسنا لو تلاحظ هذه الكور نحسب من خلالها التصادم بطريقة معينة و اذا كنت مهتم بالطريقة الحسابية مع ان معظم المحركات توفرها من دون علمك و لكن ها هي :
relPosition = sphere1 position – sphere2 position
dist = relPosition * relPosition
minDist = sphere1 radius + sphere2 radius
if (dist <= minDist * minDist)
{
collision
}
Else
{
No collision
}
التكملة في الرد القادم
.
تعليق