الدرس 8 من 10
كشف التصادم
- 13 دقيقة
- 6 معايير للتصحيح
- 3 تلميحات
- إلى المطلوب
هدف الدرس
مستطيلات ودوائر وحالة التلامس
الشرح
أغلب الألعاب لا تفحص التصادم بشكل الشخصية الحقيقي، بل بشكل بسيط يحيط بها: مستطيل موازٍ للمحورين (AABB) أو دائرة. فيصير الفحص بضع مقارنات، يحتمل آلاف الكيانات في كل إطار.
والمستطيلان يتداخلان حين يتداخل مداهما على x وعلى y معًا، فالفصل على محور واحد يكفي ليفترقا. ولا تبحث عن زاوية أحدهما داخل الآخر: مستطيلان على شكل صليب يتقاطعان ولا زاوية لأيّهما داخل صاحبه. والدائرتان تتداخلان حين تقلّ المسافة بين مركزيهما عن مجموع نصفي قطريهما، وقارن المربّعات فتستغني عن math.sqrt.
والفخّ عند الحافّة: جدار يبدأ حيث ينتهي اللاعب تمامًا، أهما متصادمان؟ من يكتب <= يجعل التلامس تصادمًا، فيصطدم اللاعب بالأرض التي يقف عليها في كل إطار، ويعلق عند الحدّ بين بلاطتين متجاورتين. والقاعدة هنا صريحة: التلامس ليس تداخلًا، والمقارنات كلها صارمة.
المطلوب
اكتب aabbOverlap(a, b) لمستطيلين { x, y, w, h } حيث x, y الزاوية العليا اليسرى، وcirclesOverlap(a, b) لدائرتين { x, y, r }. كلتاهما تُرجع true للتداخل، وfalse للتلامس والتباعد.
معايير التصحيح
6 معايير- مستطيلان متداخلان جزئيًّا
- الفصل على محور واحد يكفي
- تقاطع الصليب تداخل
- التلامس عند الحافّة ليس تداخلًا
- الدائرتان تُقاسان بالمسافة لا بالمحاور
- الدائرتان المتلامستان لا تتداخلان